当前位置: 代码迷 >> Sql Server >> 新人小疑点,求指教。多谢
  详细解决方案

新人小疑点,求指教。多谢

热度:15   发布时间:2016-04-27 18:37:43.0
新人小问题,求指教。谢谢
以下是厂家可以生产的产品列表,产品类型共有:电话、烟、酒等三种。

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  生产厂商
  相关解决方案