前提・実現したいこと
データベース設計についての質問です。
生徒の受講記録テーブルがあります。
ログID | 氏名 | 教科ID | 教科名 | 科目ID | 科目名 | 合否 |
---|---|---|---|---|---|---|
1 | 太郎 | 1 | 理科 | 1 | 化学 | 1 |
2 | 太郎 | 1 | 理科 | 2 | 物理 | 0 |
3 | 太郎 | 1 | 理科 | 3 | 生物 | 1 |
4 | 花子 | 1 | 理科 | 1 | 化学 | 1 |
5 | 花子 | 1 | 理科 | 2 | 物理 | 1 |
6 | 花子 | 1 | 理科 | 3 | 生物 | 1 |
上記のようなテーブルがあるとして、
以下のようにSELECTしたいです。
・氏名、教科名、科目名をSELECT
・ただし、教科(理科)内の科目(化学、物理、生物)内で一つでも不合格(0)な科目がある場合、その教科はSELECTしない
つまり、物理が不合格な太郎くんは教科が全て修了していないとして抽出せず、
氏名 | 教科名 | 科目名 |
---|---|---|
花子 | 理科 | 化学 |
花子 | 理科 | 物理 |
花子 | 理科 | 生物 |
上記のような結果を出したいです。
ですが、どういったWHERE文を書けばいいのかわかりません。
この結果を出せるようなWHERE文(またはGROUP BY ~ HAVING)を教えてください。
該当のソースコード
CREATE TABLE Course_history ( log_id INT NOT NULL, name NVARCHAR(5) NOT NULL, course_id INT NOT NULL, course_name NVARCHAR(5) NOT NULL, subject_id INT NOT NULL, subject_name NVARCHAR(5) NOT NULL, is_passed INT NOT NULL)
INSERT INTO Course_history VALUES (1,'太郎',1,'理科',1,'化学',1) INSERT INTO Course_history VALUES (2,'太郎',1,'理科',2,'物理',0) INSERT INTO Course_history VALUES (3,'太郎',1,'理科',3,'生物',1) INSERT INTO Course_history VALUES (4,'花子',1,'理科',1,'化学',1) INSERT INTO Course_history VALUES (5,'花子',1,'理科',2,'物理',1) INSERT INTO Course_history VALUES (6,'花子',1,'理科',3,'生物',1)
補足情報(FW/ツールのバージョンなど)
SQL Serverを使用しています。
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー