• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL(SELECT文)を教えてください)

複数の名称・値のセットを持つテーブルから日付ごとの値を取得する方法

このQ&Aのポイント
  • SQL Serverを勉強中の方に、複数の名称・値のセットを持つテーブルから日付ごとの値を取得する方法を教えます。
  • 具体的な例として、以下のようなテーブルがあるとします。
  • このテーブルから日付ごとの値を取得し、名称を列とした表を作成するためには、次のようなSQL SELECT文を使用します。

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

Date と Name が同一のレコードが複数在る場合や、同一のDateに a だけが存在して b, c が無い場合などはどういった値になれば良いのでしょうか? 仮に Date と Name が同一のレコードが複数有る場合は最大の値、特定の Name の値が無い場合は null になるとすると、下記の様なSQLで取得できるでしょう。 SELECT Date, MAX(CASE WHEN Name = 'a' THEN Value ELSE NULL END) AS a, MAX(CASE WHEN Name = 'b' THEN Value ELSE NULL END) AS b, MAX(CASE WHEN Name = 'c' THEN Value ELSE NULL END) AS c FROM tbl GROUP BY Date; この様に CASE 式と集約関数を組み合わせは非常に便利です。 下記のページが参考になるでしょう。 http://codezine.jp/article/detail/404?p=2 http://codezine.jp/article/detail/751?p=1

mokiti3
質問者

お礼

考えているよりもシンプルで良い結果を得ることができ、またサイトも非常に参考になりました。 丁寧なご回答まことにありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.1

それじゃ、ちっとも勉強にならんでしょ。 もっと頑張ったところを見せてください。

mokiti3
質問者

補足

現状考えているのは SELECT Date FROM tbl GROUP BY Date のように日付をまとめた結果に SELECT * FROM tbl2 A Left JOIN tbl B ON A.Date=B.Date でLeft Joinする方法を考えていますが、 列を増やして横に並べるには至らず、そこでつまずいています。

すると、全ての回答が全文表示されます。

関連するQ&A