2013-02-12 130 views
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是需要旋轉的動態列。

我需要pivote上表中得到以下結果

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 

請幫助。

謝謝。

+2

**什麼**數據庫系統/產品/ RDBMS ?? – 2013-02-12 21:44:17

+0

可能重複的[SQL Server動態PIVOT查詢?](http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query) – 2014-04-24 18:03:16

回答

2

基於你的previous question was tagged with sql server的事實,我猜你需要sql server語法。

爲了得到結果,您需要同時使用UNPIVOTPIVOT函數。未轉位將採用TCountCount列並將它們轉換爲行,然後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 Fiddle with Demo

但是,如果你有數目不詳的日期,那麼你將需要動態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 with Demo

兩者的結果是:

| COL | 2013-02-06 | 2013-02-12 | 2013-02-21 | 2013-02-27 | 
-------------------------------------------------------------- 
| COUNT |   35 |   23 |   54 |   12 | 
| TCOUNT |  3500 |  4000 |  1000 |  5000 | 
+0

爲什麼,哦,爲什麼微軟不能給我們真正的動態pivoting ? Blearg。 – ErikE 2013-02-12 21:56:45

+0

@ErikE當這種情況發生時,我會爲此感到高興。 – Taryn 2013-02-12 21:57:11

+0

這可能是由於複雜的引擎內部原因,如果沒有神靈的機智賦予,凡人不能理解。 – ErikE 2013-02-12 21:59:19