日期:2014-05-17  浏览次数:20612 次

关于类似的行列转换的疑难问题
举例数据如图所示

转成如下图所示
行列转换 SQLSERVER

------解决方案--------------------
动态的
--create table t(商品 varchar(100),
--价格 int,
--商店 varchar(100),
--销量 int)
 
--insert into t
--values('商品1',15,'商店1',3)
--insert into t
--values('商品1',15,'商店2',5)
--insert into t
--values('商品1',15,'商店3',6)
--insert into t
--values('商品2',15,'商店1',4)
--insert into t
--values('商品2',15,'商店2',6)
--insert into t
--values('商品2',15,'商店3',5)
--insert into t
--values('商品3',15,'商店1',7)
--insert into t
--values('商品3',15,'商店2',5)
--insert into t
--values('商品3',15,'商店3',6)
declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename('销量')+'=max(case when [商店]='+quotename(商店,'''')+' then [销量] else 0 end)'
+','+quotename(商店)+'=max(case when [商店]='+quotename(商店,'''')+' then [商店] else ''0'' end)'
from t group by 商店
exec('select [商品],价格'+@s+' from t group by [商品],价格')
/*
商品                                                                                                   价格          销量          商店1                                                                                                  销量          商店2                                                                                                  销量