0

我有一个包含以下值的表。

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

请帮忙。

谢谢。

4

1 回答 1

2

基于您之前的问题被标记为 sql server的事实,我猜您需要 sql server 语法。

为了获得结果,您需要同时使用 theUNPIVOTPIVOT函数。unpivot 将采用TCountandCount列并将它们转换为行,然后PIVOT将采用 thedates并将它们转换为列。

如果您提前知道这些值,则可以对查询进行硬编码:

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 Fiddle

但是,如果您有未知数量的日期,那么您将需要动态 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)

请参阅带有演示的 SQL Fiddle

两者的结果是:

|    COL | 2013-02-06 | 2013-02-12 | 2013-02-21 | 2013-02-27 |
--------------------------------------------------------------
|  COUNT |         35 |         23 |         54 |         12 |
| TCOUNT |       3500 |       4000 |       1000 |       5000 |
于 2013-02-12T21:52:17.687 回答