2

私は以下のようなテーブルを持っています

column_date | color | qty | supplier | location
1 June 2012 | red   | 2   | XY       | A wing
1 June 2012 | red   | 1   | AB       | A wing
1 June 2012 | blue  | 4   | CD       | A wing
1 June 2012 | blue  | 1   | XY       | B wing
2 June 2012 | yellow| 13  | CD       | B wing
2 June 2012 | green | 45  | CD       | A wing
2 June 2012 | blue  | 32  | AB       | A wing
2 June 2012 | red   | 37  | XY       | A wing
2 June 2012 | red   | 2   | XY       | B wing
2 June 2012 | red   | 1   | AB       | A wing
2 June 2012 | blue  | 4   | CD       | A wing
3 June 2012 | red   | 1   | AB       | B wing
3 June 2012 | blue  | 4   | CD       | A wing
3 June 2012 | blue  | 1   | XY       | B wing
3 June 2012 | yellow| 13  | CD       | B wing
3 June 2012 | green | 45  | CD       | A wing
3 June 2012 | blue  | 32  | AB       | A wing

そして、以下のような出力が欲しいです。クエリでそれが可能かどうかはわかりません。また、可能であればどのように始めればよいのかわかりません。このような出力を表示するためのアドバイスまたは可能なクエリを探しています。ありがとうございました。

                                    Supplier
Date           |        XY         |        CD          |       AB
               | A wing  | B wing  | A wing  | B wing   | A wing  | B wing
1 June 2012    |  2      |  1      |  4      | 0        | 1       | 0
2 June 2012    | 37      |  2      |  49     | 13       | 33      | 0
3 June 2012    | 0       |  1      |  49     | 13       | 32      | 1
Total          | 39      |  4      | 102     | 26       | 66      | 1
4

1 に答える 1

0
SELECT column_date,
    MAX(CASE WHEN supplier = 'XY' AND location = 'A wing' THEN qty END) AS 'XY A wing',
    MAX(CASE WHEN supplier = 'XY' AND location = 'B wing' THEN qty END) AS 'XY B wing',
    MAX(CASE WHEN supplier = 'CD' AND location = 'A wing' THEN qty END) AS 'CD A wing',
    MAX(CASE WHEN supplier = 'CD' AND location = 'B wing' THEN qty END) AS 'CD B wing',
    MAX(CASE WHEN supplier = 'AB' AND location = 'A wing' THEN qty END) AS 'AB A wing',
    MAX(CASE WHEN supplier = 'AB' AND location = 'B wing' THEN qty END) AS 'AB B wing'
FROM @t
GROUP BY column_date

デモ

更新:ここで探しているのは列をピボットする方法ですが、クエリの問題は、他の列を集計できる集計列がないことですGROUP BY column_date。する必要があるためGROUP BY column_date、他の列GROUP BY clauseは集計関数に含まれるか、集計関数に含まれる必要があります。MAXそのため、回避策として集計関数を使用しました。フォアハンドでピボットしたい値がわかっている場合、これは問題ありません。ただし、不明な値や変化する値の数をピボットする場合は、これを動的に行う必要があります。SQL Serverで動的ピボットを検索してみてください。動的SQLを使用すると、多くの回避策が見つかります。たとえば、次の2つの記事を参照してください。

于 2012-07-11T15:20:15.477 に答える