2014-02-25 42 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