[英]SQL: How can I make this query more flexible
人员(表格人员 )通过考试通过考试(表格考试 )为几个学科(表格纪律 )。 我必须获取带有单元格中标记值的表[人员/学科]。
如何创建比此更灵活的查询:
SELECT
p.*, -- persons
ae.*, -- "A" exam mark
be.*, -- "B" exam mark
...
FROM
Person p,
LEFT OUTER JOIN Exam ae ON (p.Id = ae.PersonId and ae.DisciplineId = 1)
LEFT OUTER JOIN Exam be ON (p.Id = be.PersonId and be.DisciplineId = 2)
...
?
我希望它适用于任意范围的学科。
您可以按人分组,并使用案例选择适当的标记:
SELECT p.Name
, min(case when e.DisciplineId = 1 then e.Mark end) as Exam_A_Mark
, max(case when e.DisciplineId = 2 then e.Mark end) as Exam_B_Mark
FROM Person p
LEFT JOIN
Exam e
ON p.Id = e.PersonId
GROUP BY
p.Id
, p.Name
请注意,正确的SQL方法是每次检查将一行返回给客户端,并让客户端通过每次检查将一行“旋转”到每个检查的一列来格式化结果。
灵活的是什么意思? 您需要提供有关您想要的更多信息。
猜测下面的内容可能会给你你想要的东西,尽管如果你提供关于表格结构的更多信息,我们可以确定你想要做什么。
SELECT
p.*, -- persons
(CASE When ae.DisciplineID = 1 THEN ae.Mark ELSE null END) as 'A_Mark',
(CASE When ae.DisciplineID = 2 THEN ae.Mark ELSE null END) as 'B_Mark',
...
FROM
Person p,
LEFT OUTER JOIN Exam ae ON (p.Id = ae.PersonId)
ORDER BY p.Id, ae.DisciplineId
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.