重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

以下にある二つのテーブル(coursemaster, opencourses)を結合して
月ごとに講義があるかをo,xで一覧にして[期待結果]の様な表を抽出したいです。


coursemaster テーブル

course_id | course_name
1 | 経理講義
2 | 財務講義
3 |  簿記講義
4 | 税理講義

opencoursesテーブル

  month course_id
200706 | 1   
  200706 | 3
200706 | 4
200707 | 4
200708 | 2
200708 | 4



[期待結果]

     経理講義 財務講義  簿記講義  税理講義
200706  ○      ×     ○      ○
200707  ×      ×     ×      ○
200708  ×      ○     ×      ○


以下の様なSQL文で表を結合してみたのですが
日付の値が重複されてしまい、期待通りの結果になりません。
誰かご教授いただけないでしょうか?

SELECT
month AS 開講日
,CASE WHEN course_name='経理講義' THEN '○' ELSE '×' END AS 経理講義
,CASE WHEN course_name='財務講義' THEN '○' ELSE '×' END AS 財務講義
,CASE WHEN course_name='簿記講義' THEN '○' ELSE '×' END AS 簿記講義
,CASE WHEN course_name='税理講義' THEN '○' ELSE '×' END AS 税理講義
FROM
OpenCourses AS OC
INNER JOIN
CourseMaster AS CM
ON
OC.course_id = CM.course_id
ORDER BY
1
;

A 回答 (1件)

month でグループ化しないと、opencoursesテーブルに有る分の行数が出力されますね。


グループ化すると、CASE式を入れ子にする必要が出てきますが。

SELECT
month AS 開講日
,CASE WHEN SUM(CASE WHEN course_name = '経理講義' THEN 1 ELSE 0 END) > 0 THEN '○' ELSE '×' END AS 経理講義
,CASE WHEN SUM(CASE WHEN course_name = '財務講義' THEN 1 ELSE 0 END) > 0 THEN '○' ELSE '×' END AS 財務講義
,CASE WHEN SUM(CASE WHEN course_name = '簿記講義' THEN 1 ELSE 0 END) > 0 THEN '○' ELSE '×' END AS 簿記講義
,CASE WHEN SUM(CASE WHEN course_name = '税理講義' THEN 1 ELSE 0 END) > 0 THEN '○' ELSE '×' END AS 税理講義
FROM
OpenCourses AS OC
INNER JOIN
CourseMaster AS CM
ON OC.course_id = CM.course_id
GROUP BY month
ORDER BY 1
;

参考URL:http://codezine.jp/article/detail/751
    • good
    • 0
この回答へのお礼

解決しました。ありがとうございます!
ずっと悩んでいたので助かりました。

お礼日時:2014/02/24 01:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

今、見られている記事はコレ!