【发布时间】:2016-02-04 12:23:55
【问题描述】:
使用 PIVOT/UNPIVOT 我能够从这里获得...
Period Store1 Store2
--------------------------------------
Jan15 123 456
Feb15 789 101
Mar15 112 131
Apr15 415 161
...到这里,动态地(无论有多少存储我当前的脚本成功 PIVOT 到下面的集合...
Store Jan15 Feb15 Mar15 Apr15
---------------------------------------------------------------
Store1 123 789 112 415
Store2 456 101 131 161
使用这个脚本:
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@colsPivot as NVARCHAR(MAX), @query AS NVARCHAR(MAX)
/* @colsUnpivot gets list of Stores */
select @colsUnpivot = COALESCE(@colsUnpivot +', ', '') + QUOTENAME(A.name)
from (select name
from sys.columns
where object_id = object_id('mytable') and name <> 'Period') A
/* @colsPivot gets list of Periods */
select @colsPivot = COALESCE(@colsPivot +', ', '') + QUOTENAME(B.Period)
from (select distinct period
from StoreMetrics) B
set @query
= 'select store, '+@colsPivot+'
from
(
select period, store, value
from mytable
unpivot
(
value for store in ('+@colsUnpivot+')
) unpiv
) src
pivot
(
max(value)
for period in ('+@colsPivot+')
) piv'
exec(@query)
...然而,这是实际的预期结果集:
Store Period Value
--------------------------------------
Store1 Jan15 123
Store1 Feb15 789
Store1 Mar15 112
Store1 Apr15 415
Store2 Jan15 456
Store2 Feb15 101
Store2 Mar15 131
Store2 Apr15 161
无论是从原始数据集还是我的第一个数据透视结果,我如何才能动态地将所有列折叠(必须是动态的,因为周期条目会不断变化)每个元素/周期组合的行条目?
【问题讨论】:
标签: sql sql-server tsql pivot unpivot