2017-09-25 65 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

很高兴提供帮助。 :) –