我有三个表STUDENTS,SUBJECTS,RANK,数据为 -
1)STUDENTS
[NAME
(小学)]
NAME
--------
Alex
Greg
2)SUBJECTS
[ID
(小学)]:
ID
--------
100
101
102
3)RANK
[SEQ
(小学),NAME
,ID
,RANK
]
SEQ NAME ID RANK
------ ------- ------ ------
1 Alex 100 A
2 Greg 100 A
3 Greg 101 B
我想创建一个应该将数据显示为
的视图NAME ID RANK
------- ------ ------
Alex 100 A
Alex 101 Z
Alex 102 Z
Greg 100 A
Greg 101 B
Greg 102 Z
因此,对于每个学生和每个主题,视图应显示RANK
RANK
表格中的NULL
,否则将'Z'
替换为{{1}}。
我是SQL的新手。因此,我们将非常感谢您对形成查询的任何帮助!
答案 0 :(得分:1)
交叉加入student
和subject
然后左外连接结果rank
以获得所有(学生,科目)组合的排名。选择NVL
或COALESCE
列会将NULL
替换为' z'。
SELECT st.name,
su.id,
NVL(ra.rank,'Z') Rank, --COALESCE(ra.rank,'Z') Rank
FROM student st
CROSS JOIN subject su
LEFT OUTER JOIN rank ra
ON ra.name = st.name
AND ra.id = su.id
ORDER BY st.name,su.id
注意:如果您不需要,可以从上述查询中删除ORDER BY。
答案 1 :(得分:0)
SELECT r.NAME, r.ID, NVL(r.RANK, 'Z')
FROM RANK r, studendts st, SUBJECTS su
WHERE st. NAME = r. NAME
AND su.ID = r.ID
ORDER BY 1,2,3