日期:2014-05-18  浏览次数:20726 次

这样的查询语句该怎么写?
有以下两个表:
1.商品信息表
供应商 商品名称 进货数量 结存
1 甲天下牛奶 10 5
1 伊利牛奶 20 10
2 苹果 20 10
2 香蕉 30 15

2.字段表
供应商 字段名称 显示
1 商品名称 1
1 进货数量 1
1 结存 0
2 商品名称 0
2 进货数量 1
2 结存 0

现要查出"供应商"为1,而且字段表中的"显示"为1的字段,即得出以下结果:
供应商 商品名称 进货数量 
1 甲天下牛奶 10
1 伊利牛奶 20
因为字段表中的"结存"的"显示"字段为0,所以不显示该字段,请问该怎么写SQL语句?

想实现的功能是:根据字段表中“显示”字段为1来查询出商品信息表中的字段 


------解决方案--------------------
select a.供应商,a.商品名称,a.进货数量
from 商品信息表 a
inner join 字段表 b on a.供应商 = b.供应商 and b.显示 = 1
------解决方案--------------------
SQL code

--> 测试数据: 商品信息表
create table 商品信息表(供应商 int,商品名称 varchar(10),进货数量 int,结存 int)
insert into 商品信息表
select 1,'甲天下牛奶',10,5 union all
select 1,'伊利牛奶',20,10 union all
select 2,'苹果',20,10 union all
select 2,'香蕉',30,15
--> 测试数据: 字段表
create table  字段表(供应商 int,字段名称 varchar(8),显示 int)
insert into 字段表
select 1,'商品名称',1 union all
select 1,'进货数量',1 union all
select 1,'结存',0 union all
select 2,'商品名称',0 union all
select 2,'进货数量',1 union all
select 2,'结存',0


declare @sql varchar(1000)
select @sql=isnull(@sql+',','')+字段名称 from 字段表 where 供应商=1 and 显示=1
exec('select 供应商,'+@sql+' from 商品信息表 where 供应商=1')

------解决方案--------------------
SQL code
  
/******************************************************************************/
/*回复:20080519103总:00023                          */
/*主题:根据字段表中“显示”字段                        */
/*作者:二等草                                */
/******************************************************************************/

set nocount on

--数据--------------------------------------
create table [商品信息表] ([供应商] int,[商品名称] varchar(10),[进货数量] int,[结存] int)
insert into [商品信息表] select 1,'甲天下牛奶',10,5
insert into [商品信息表] select 1,'伊利牛奶',20,10
insert into [商品信息表] select 2,'苹果',20,10
insert into [商品信息表] select 2,'香蕉',30,15

create table [字段表] ([供应商] int,[字段名称] varchar(8),[显示] int)
insert into [字段表] select 1,'商品名称',1
insert into [字段表] select 1,'进货数量',1
insert into [字段表] select 1,'结存',0
insert into [字段表] select 2,'商品名称',0
insert into [字段表] select 2,'进货数量',1
insert into [字段表] select 2,'结存',0
go
--代码--------------------------------------
declare @s varchar(8000),@gys int
select @gys = 1
select @s = 'select 供应商'
select @s = @s+','+字段名称 from 字段表 where 供应商 = 1 and 显示 = 1
select @s = @s+' from 商品信息表 where 供应商 = '+rtrim(@gys)
exec(@s)
go
/*结果--------------------------------------
供应商    商品名称    进货数量   
----------- ---------- -----------
1      甲天下牛奶    10
1      伊利牛奶    20
--清除------------------------------------*/
drop table 字段表,商品信息表