繁体   English   中英

SQL:如何使此查询更灵活

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM