2014-02-25 41 views
0

我有這樣的查詢:移調T-SQL查詢

SELECT 

SUM(
    CASE 
    WHEN 
START_DATE <= '2014-01-01' AND 
(END_DATE > '2014-01-01' OR END_DATE IS NULL)THEN 1 ELSE 0 END) AS '201401', 

SUM(
    CASE 
    WHEN 
START_DATE <= '2014-02-01' AND 
(END_DATE > '2014-02-01' OR END_DATE IS NULL)THEN 1 ELSE 0 END) AS '201402') 

    (etc) 

FROM table 

使我這個作爲輸出:

201401 201402 (etc) 
485  498 

我需要這被調換,例如給我這個輸出:

201401 485 
201402 498 
(etc) 

例子我發現都是分組的數據;我只需要交換行和列。

回答

1

您可以使用轉工會:

SELECT 
'201401', 
SUM(
    CASE 
    WHEN 
START_DATE <= '2014-01-01' AND 
(END_DATE > '2014-01-01' OR END_DATE IS NULL)THEN 1 ELSE 0 END) 
FROM table 

UNION ALL 

SELECT 
'201402', 
SUM(
    CASE 
    WHEN 
START_DATE <= '2014-02-01' AND 
(END_DATE > '2014-02-01' OR END_DATE IS NULL)THEN 1 ELSE 0 END) 
FROM table 

UNION ALL 

SELECT 
    (etc) 
FROM table 
+0

看起來並不高雅,但完成了工作。可以想到它自己:) – Lennart

+0

SQL很少看起來優雅..反正螺絲優雅,它的作品。 –

1

您可以通過使用PIVOT做到這一點,但你的列數必須是有限的,並且給出這樣的:

PIVOT 
    (
     SUM (Indicator) FOR Day IN ( [1],[2],[3],[4],[5],[6],[7],[8],[9],[10], 
        [11],[12],[13],[14],[15],[16],[17],[18],[19],[20], 
        [21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31]) 
    ) AS pvt 
0

你最好這樣做對客戶端。不在Db中。

SELECT fields, x FROM (
    -- {{ your query here 
    select 485 as [201401], 498 as [201402] 
    -- }} your query here 
) AS t 
UNPIVOT (
    x FOR fields in ([201401], [201402]) 
) AS unpvt