2017-12-01 7 views
1

ratetypecosttypeの両方の列に基づいて、次のデータをピボットします。 ratetypecosttypeの値をまとめて連結しないで、これをどうやって行うのか分かりません...2つの「for」列に基づくSQLピボット

もっと良い方法がありますか?

Employee Period Rate1CostA Rate1CostB Rate2CostA Rate2CostB 
------------------------------------------------------------------- 
1   201701 500   700   400   200 

Employee Period RateType CostType Value 
-------------------------------------------- 
1   201701 Rate1  CostA  500 
1   201701 Rate1  CostB  700 
1   201701 Rate2  CostA  400 
1   201701 Rate2  CostB  200 

私は醜い感じた、最初の2つのフィールドを連結して、それをやって把握することができる唯一の方法。以下のような何か...

SELECT 
    Employee, 
    Period, 
    Rate1CostA, Rate1CostB, 
    Rate2CostA, Rate2CostB 
FROM 
    (SELECT 
     Employee, 
     Period, 
     RateType + CostType as RateCostType, 
     Value 
    FROM 
     MyTable) CostRate 
PIVOT 
    (MAX(Value) 
     FOR RateCostType IN (Rate1CostA, Rate1CostB, Rate2CostA, Rate2CostB) 
    ) AS p 
+0

Woops、あなたは私がMSSQLを使用している、正しい、私はタグを更新します – kralco626

答えて

3

条件付き集約が一つのアプローチです:

SELECT Employee, Period, 
     MAX(CASE WHEN RateType = 'Rate1' AND CostType = 'CostA' 
       THEN Value 
      END) Rate1CostA, 
     MAX(CASE WHEN RateType = 'Rate1' AND CostType = 'CostB' 
       THEN Value 
      END) Rate1CostB, 
     MAX(CASE WHEN RateType = 'Rate2' AND CostType = 'CostA' 
       THEN Value 
      END) Rate2CostA, 
     MAX(CASE WHEN RateType = 'Rate2' AND CostType = 'CostB' 
       THEN Value 
      END) Rate2CostB 
FROM YourTable 
GROUP BY Employee, Period 
関連する問題