• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL Server 縦データを横データに)

SQL Server 縦データを横データに

このQ&Aのポイント
  • SQL Serverにおいて、縦に配置されたデータを横に配置する方法を教えてください。
  • 下記のテーブルから条件に応じたデータを出力するSQL文を作成したいです。
  • テーブル「TEST」で、条件1では「NAME」列が「A」のデータを抽出し、条件2では「ICHI」列でグループ化し、条件3では「ITEM」列が「D2」と「D3」のデータを抽出します。その結果を表形式で表示したいです。アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.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 ;

imfv888
質問者

お礼

アドバイスありがとうございました。 助かりました。

その他の回答 (4)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.4

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)
回答No.3

スカラ・サブクエリを使う方法も有りますね。 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 ;

参考URL:
http://codezine.jp/article/detail/751?p=1
回答No.2

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)
回答No.1

同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を外部結合するとできあがり!です。

関連するQ&A

専門家に質問してみよう