以下是厂家可以生产的产品列表,产品类型共有:电话、烟、酒等三种。
ID 产品类型 生产厂商
1 电话 aa
2 烟 bb
3 酒 bb
4 电话 dd
5 烟 cc
6 酒 bb
请编写一条SQL语句,产生类似以下结果集:
生产厂商 电话 烟 酒
aa 1 0 0
bb 0 1 2
cc 0 1 0
dd 1 0 0
====================================================
------解决方案--------------------
- SQL code
--> --> (Roy)生成測試數據 if not object_id('Tempdb..#T') is null drop table #TGoCreate table #T([ID] int,[产品类型] nvarchar(2),[生产厂商] nvarchar(2))Insert #Tselect 1,N'电话',N'aa' union allselect 2,N'烟',N'bb' union allselect 3,N'酒',N'bb' union allselect 4,N'电话',N'dd' union allselect 5,N'烟',N'cc' union allselect 6,N'酒',N'bb'Go--SQL2005 declare @s nvarchar(4000),@s2 nvarchar(4000)set @s2='[生产厂商]'Select @s=isnull(@s+',','')+quotename(产品类型), @s2=isnull(@s2+',','')+quotename(产品类型)+'=isnull('+quotename(产品类型)+',0)' from #T group by 产品类型 print @s2exec('select [email protected]+' from (select 生产厂商,产品类型,ID=1 from #T) as a pivot (sum(ID) for 产品类型 in([email protected]+'))b')/*生产厂商 电话 酒 烟aa 1 0 0bb 0 2 1cc 0 0 1dd 1 0 0*/
------解决方案--------------------
- SQL code
静态的:select 生产厂商, sum(case 产品类型 when '电话' then 1 else 0 end) as 电话, sum(case 产品类型 when '酒' then 1 else 0 end) as 酒, sum(case 产品类型 when '烟' then 1 else 0 end) as 烟from tbgroup by 生产厂商