首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

列横向显示的有关问题

2012-03-03 
列横向显示的问题表T供应商产品名报价G1C110G2C111G3C112G1C210G2C211G3C212G1C314G3C312我现在要把供应商

列横向显示的问题
表T
供应商   产品名   报价
G1           C1           10
G2           C1           11
G3           C1           12
G1           C2           10
G2           C2           11
G3           C2           12
G1           C3           14
G3           C3           12
我现在要把供应商列横向显示该怎么做?
假如我在不知供应商数量的条件下用动态SQL生成;
产品名   G1     G2     G3
C1           10     11     12
C2           10     11     12
C3           14     0       12

我看邹建的书 < <SQL   Server200   开发与管理> > 上有相知的例子,
但是没看懂!唉~



[解决办法]
Declare @S Nvarchar(4000)
Select @S = ' Select 产品名 '
Select @S = @S + ', SUM(Case 供应商 When ' ' ' + 供应商 + ' ' ' Then 报价 Else 0 End) As ' + 供应商
From T Group By 供应商
Select @S = @S + ' From T Group By 产品名 Order By 产品名 '
EXEC(@S)
[解决办法]
create table test (vendor char(2),[group] char(2),price decimal(10,1))
insert test select 'G1 ', 'C1 ',10.0
union all select 'G2 ', 'C1 ',11.0
union all select 'G3 ', 'C1 ',12.0
union all select 'G1 ', 'C2 ',10.0
union all select 'G2 ', 'C2 ',11.0
union all select 'G3 ', 'C2 ',12.0
union all select 'G1 ', 'C3 ',14.0
union all select 'G3 ', 'C3 ',12.0

Declare @s nvarchar(4000)
set @s= 'select [group] '
select @s=@s + ', '+quotename(vendor)
+N '=sum(case vendor when '+quotename(vendor,N ' ' ' ')
+N ' then price end) '
from test
group by vendor
exec (@s+N '
from test
group by [group] ')

drop table test

group G1 G2 G3
C110.011.012.0
C210.011.012.0
C314.0NULL12.0

热点排行