2017-09-25 76 views
0

我需要從列到行。不知道如何去實現最佳方式 我們的2008R2服務器上沒有可用的Pivot和Unpivot命令。我嘗試了UNION ALL設置,但也似乎沒有得到那個工作tsql列到行withut pivot/unpivot函數

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

你是什麼意思你沒有2008年提供PIVOT/UNPIVOT ???這些功能絕對在2008年。 –

+0

我們的管理員不會讓他們使用是我的意思。 – ncsol

+0

我同意Jason的看法,他們通常比他們的價值更痛苦。但是,您的管理員不能禁用這些功能,它們是sql server本地的。他們可能有一個公司規則,說明你不要使用它們。 ;) –

回答

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 
+0

幾個非常小的調整,它完美的作品。謝謝傑森你是一個champp。 – ncsol

+0

很高興提供幫助。 :) –