- ベストアンサー
SQL Server 縦データを横データに
- SQL Serverにおいて、縦に配置されたデータを横に配置する方法を教えてください。
- 下記のテーブルから条件に応じたデータを出力するSQL文を作成したいです。
- テーブル「TEST」で、条件1では「NAME」列が「A」のデータを抽出し、条件2では「ICHI」列でグループ化し、条件3では「ITEM」列が「D2」と「D3」のデータを抽出します。その結果を表形式で表示したいです。アドバイスをお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#3 です。#4 さんとほとんど同じですが、その後気付いたのが MAX を使う方法でした。 SELECT NAME, ICHI, MAX(CASE WHEN ITEM = 'D2' THEN DATA ELSE NULL END) AS DATA_D2, MAX(CASE WHEN ITEM = 'D3' THEN DATA ELSE NULL END) AS DATA_D3 FROM TEST a WHERE NAME = 'A' GROUP BY NAME, ICHI ;
その他の回答 (4)
- Siegrune
- ベストアンサー率35% (316/895)
select NAME,ICHI ,sum(case when ITEM = 'D2' then DATA else 0 end) as DATA_D2 ,sum(case when ITEM = 'D3' then DATA else 0 end) as DATA_D3 where NAME = 'A' group by NAME,ICHI order by ICHI じゃダメですか?(未検証ですけど)
- root139
- ベストアンサー率60% (488/809)
スカラ・サブクエリを使う方法も有りますね。 SELECT NAME, ICHI, (SELECT DATA FROM TEST b WHERE ITEM = 'D2' AND a.NAME = b.NAME AND a.ICHI = b.ICHI) AS DATA_D2, (SELECT DATA FROM TEST c WHERE ITEM = 'D3' AND a.NAME = c.NAME AND a.ICHI = c.ICHI) AS DATA_D3 FROM TEST a WHERE NAME = 'A' GROUP BY NAME, ICHI ;
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
SELECT D2.NAME,D2.ICHI,D2.DATA,D3.DATA FROM TEST D2 INNER JOIN TEST D3 ON D3.NAME=D2.NAME AND D3.ICHI=D2.ICHI AND D3.ITEM='D3' WHERE D2.NAME='A' AND D2.ITEM='D2' ORDER BY 2 でどうでしょうか。
- singlecat
- ベストアンサー率33% (139/418)
同TESTテーブルに下記のQuery3つ用意します。 1.Main NAMEとICHIの2項目でグループ化 条件として NAMEが"A"、ITEMが"D2","D3" すると、以下のようになります。 NAME ICHI ----- ---- A A1 A A2 2.Sub1 NAMEとICHIの2項目でグループ化 DATAを集計(SUM)します。 条件として NAMEが"A"、ITEMが"D2"のみ すると、以下のようになります。 NAME ICHI DATA1 ----- ---- ---- A A1 2 A A2 20 3.Sub2 NAMEとICHIの2項目でグループ化 DATAを集計(SUM)します。 条件として NAMEが"A"、ITEMが"D3"のみ すると、以下のようになります。 NAME ICHI DATA2 ----- ---- ---- A A1 3 A A2 30 ※そして、MainにSub1,Sub2を外部結合するとできあがり!です。
お礼
アドバイスありがとうございました。 助かりました。