tsql列到具有pivot / unpivot函数的行

时间:2017-09-25 19:37:45

标签: sql sql-server tsql

我需要从列到行。不知道如何走最好的路 我们的2008R2服务器上没有Pivot和Unpivot命令。我尝试了一个Union All设置,但似乎无法让它工作

Type     S100                  S50 (column header row)

Type1    5000.00               56760.00              
Type2    2345.00               87650.00          

Denom   Type1        Type2   (column header row)
100     5000.00      2345.00 
50      56760.00     87650.00

1 个答案:

答案 0 :(得分:2)

你不想使用PIVOT&无论如何,UNPIVOT ......他们的痛苦超过了他们的价值。这应该可以解决问题......

IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL 
DROP TABLE #TestData;

CREATE TABLE #TestData (
    TypeId CHAR(5),
    s100 MONEY,
    s50 MONEY 
    );
INSERT #TestData(TypeId, s100, s50) VALUES
    ('Type1', 5000.00, 56760.00),           
    ('Type2', 2345.00, 87650.00);

--SELECT * FROM #TestData td;

WITH 
    cte_Unpivot AS (
        SELECT 
            td.TypeId,
            d.Denom,
            d.cValue
        FROM 
            #TestData td
            CROSS APPLY ( VALUES (100, td.s100), (50, td.s50) ) d (Denom, cValue)
        )
SELECT 
    u.Denom,
    Type1 = SUM(CASE WHEN u.TypeId = 'Type1' THEN u.cValue END),
    Type2 = SUM(CASE WHEN u.TypeId = 'Type2' THEN u.cValue END)
FROM 
    cte_Unpivot u
GROUP BY
    u.Denom
ORDER BY 
    u.Denom DESC;

结果...

Denom       Type1                 Type2
----------- --------------------- ---------------------
100         5000.00               2345.00
50          56760.00              87650.00