2016-10-19 4 views
-1

まあ、ピボットSQLの参照がたくさんあります。しかし、まだ、私は私の問題を解決することができませんでした。
ピボットSQL(年)

私は、次の表を持っている:

----------------------------------------------------------------------- 
InspectYear  PartNo PartDesc A  B  C  D 
----------------------------------------------------------------------- 
2015   001  Part 1  9  8  8  6 
2015   002  Part 2  8  8  8  6 
2014   001  Part 1  9  2  8  6 
2014   002  Part 2  8  8  8  4 

私は "InspectYear" ダイナミックで次の結果を持つようにしたい:

----------------------------------------------------------------------- 
PartNo PartDesc NewCol  2014 2015 
----------------------------------------------------------------------- 
001  Part 1 A    9  9 
001  Part 1 B    2  8 
001  Part 1 C    8  8 
001  Part 1 D    6  6 
002  Part 2 A    8  8 
002  Part 2 B    8  8 
002  Part 2 C    8  8 
002  Part 2 D    4  6 

誰もがピボットクエリのためのアイデアを持っていますか?
本当にありがとうございます。

答えて

1

試してみてください。

DECLARE @InspectYear AS NVARCHAR(MAX),@Query AS NVARCHAR(MAX); 

SET @InspectYear = STUFF((SELECT distinct ',' + QUOTENAME(InspectYear) 
      FROM table4 c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

SET @Query = 
';WITH data AS 
(
    SELECT InspectYear, PartNo, PartDesc, NewCol, number 
    FROM table4 
    UNPIVOT 
    (
     number 
     FOR NewCol IN (A, B, C,D) 
    ) AS unpvt 
) 
SELECT * 
FROM data 
PIVOT 
(
    SUM(number) 
    FOR InspectYear IN ('[email protected]+') 
) AS pvt 
ORDER BY PartNo, PartDesc, NewCol ' 

EXECUTE(@query) 

注:テーブルを作成し、

+1

はい!この作品!!私はあまりにもクエリを書いています... :) – Doraemon

+1

男。あなたはチャンピオンです! – Haminteu

0

UNPIVOTに最初のデータを入力し、もう一度PIVOTにしてください。

ここに私が見つけた解決策があります。これが要件を満たしているかどうか確認してください。

CREATE TABLE table4 
(
    InspectYear INT, 
    PartNo VARCHAR(5), 
    PartDesc VARCHAR(30), 
    A INT, 
    B INT, 
    C INT, 
    D INT 
) 

INSERT INTO table4 VALUES 
(2015, '001', 'Part 1', 9, 8, 8, 6), 
(2015, '002', 'Part 2', 8, 8, 8, 6), 
(2014, '001', 'Part 1', 9, 2, 8, 6), 
(2014, '002', 'Part 2', 8, 8, 8, 4) 

;WITH data AS 
(
    SELECT InspectYear, PartNo, PartDesc, NewCol, number 
    FROM table4 
    UNPIVOT 
    (
     number 
     FOR NewCol IN (A, B, C,D) 
    ) AS unpvt 
) 
SELECT * 
FROM data 
PIVOT 
(
    SUM(number) 
    FOR InspectYear IN ([2014], [2015]) 
) AS pvt 
ORDER BY PartNo, PartDesc, NewCol 

お試しください。ありがとうございました。ダイナミックPIVOT以下:)

+0

完璧なソリューション –

+0

こんにちは、このためのおかげで、データのステートメントを挿入し@doraemon参照してください。しかし、これは静的なピボットです。私は動的なものが必要です。 'InspectYear'フィールドが常に追加されているからです。 – Haminteu