现在有两张表
表1:
姓名
数量
产品
表2:
产品
要求按产品统计处 不同姓名和产品 所对应的是数量总和
例子:
表1
姓名 数量 产品
张三 30 铅笔
张三 10 毛笔
李四 10 圆珠笔
张三 20 铅笔
表2
产品
铅笔
毛笔
圆珠笔
钢笔
要求查询结果:
姓名 铅笔 毛笔 圆珠笔 钢笔
张三 50 10 0 0
李四 0 0 10 0
求SQL语句实现(注表2内容可扩展)
[b]问题补充:[/b]
hello112520 你的语句不符合我要求的结果 而且product这个字段的值需要根据 表2的product来决定 不能写死的。
而且 根据你的语句结果是
姓名 铅笔 毛笔 圆珠笔 钢笔
张三 30 10 0 0
李四 0 0 10 0
而正确的应该是
姓名 铅笔 毛笔 圆珠笔 钢笔
张三 50 10 0 0
李四 0 0 10 0
我做了个例子看是不是你想要的结果!
create table demo(
name varchar2(10),
num number,
product varchar2(10)
)
select name 姓名,max(decode(product,'铅笔',num,0)) 铅笔 ,max(decode(product,'毛笔',num,0)) 毛笔
,max(decode(product,'圆珠笔',num,0)) 圆珠笔,max(decode(product,'钢笔',num,0)) 钢笔 from demo group by name
问题好复杂啊~,楼上的回答已经很不错了,居然还不能满足,只好给出这个了
declare @sqlText nvarchar(2000)
select @sqlText='select 表1.姓名,'
select @sqlText=@sqltext+'sum((CASE 表1.产品 WHEN '''+a.产品+''' THEN 数量 ELSE 0 END)) AS ''' +a.产品+
''',' from (select distinct 产品 from 表2) as a
select @sqlText=left(@sqlText,Len(@sqlText)-1)+' from 表1 group by 姓名 '
print @sqltext
exec(@sqltext)
go
再不行,也没辙了。