一个卷id有6个主题,现在我总是想为每个卷显示一组6个主题(有或没有相应的值)

  • 本文关键字:6个 一组 显示 id 一个 sql oracle
  • 更新时间 :
  • 英文 :


说滚动1,2,3,4,5

说科目-化学,comp,hist,phys

但有些有标记,有些有null作为标记。。现在我想显示为

roll   sub  marks
1      chem   64
1      comp   null
1      hist   55
1      phys   null
2      chem   null
2      comp   46
2      hist   55
2      phys   null
3      chem   null
3      comp   null
3      hist   55
3      phys   78

我怎样才能获得这个加入。。如果表格不同有学生表、科目表和成绩表

您可以形成一个"日历";由所有卷和主题组成的表格。然后,左键将此日历表连接到包含实际标记的当前表:

SELECT
r.roll,
s.sub,
t.marks
FROM (SELECT DISTINCT roll FROM yourTable) r
CROSS JOIN (SELECT DISTINCT sub FROM yourTable) s
LEFT JOIN yourTable t
ON t.roll = r.roll AND t.sub = s.sub
ORDER BY
r.roll,
s.sub;

请注意,如果您对这种类型的查询有长期的要求,那么理想情况下,您应该随时准备好卷和主题的真实表格。

如果表格不同,则有学生表格、主题表格和分数表格

使用cross join生成行,使用left join引入所需数据:

select su.*, st.*, m.mark
from students st cross join
subjects su left join
marks m
on m.student_id = st.student_id and m.subject_id = su.subject_id
order by st.student_id, su.subject_id;

最新更新