我有一个包含以下值的表格。
Date TCOUNT COUNT
02/06/2013 00:00 3500 35
02/12/2013 00:00 4000 23
02/21/2013 00:00 1000 54
02/27/2013 00:00 5000 12
其中Date
是动态col需要旋转。
我需要调整上表以获得以下结果
02/06/2013 00:00 02/12/2013 00:00 02/21/2013 00:00 02/27/2013 00:00
35 23 54 12
3500 4000 1000 5000
请帮忙。
感谢。
答案 0 :(得分:2)
基于你previous question was tagged with sql server的事实,我猜你需要sql server语法。
要获得结果,您需要同时使用UNPIVOT
和PIVOT
函数。 unpivot会将TCount
和Count
列转换为行,然后PIVOT
将dates
转换为列。
如果您提前知道这些值,那么您可以对查询进行硬编码:
select *
from
(
select date, value, col
from yourtable
unpivot
(
value
for col in (tcount, count)
) unpiv
) src
pivot
(
max(value)
for date in ([2013-02-06], [2013-02-12],
[2013-02-21], [2013-02-27])
) piv;
但是,如果您的日期数量未知,那么您将需要动态SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(varchar(10), Date, 120))
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT col, ' + @cols + ' from
(
select convert(varchar(10), Date, 120) date,
value, col
from yourtable
unpivot
(
value
for col in (tcount, count)
) unpiv
) src
pivot
(
max(value)
for date in (' + @cols + ')
) p '
execute(@query)
两者的结果是:
| COL | 2013-02-06 | 2013-02-12 | 2013-02-21 | 2013-02-27 |
--------------------------------------------------------------
| COUNT | 35 | 23 | 54 | 12 |
| TCOUNT | 3500 | 4000 | 1000 | 5000 |