我正在尝试编写一个包含复杂约束的查询(至少对我而言)。我需要在我的数据库中从三个测试(测试A,测试B和来自TEST表的测试C)中提取显示其分数的学生数据行。我需要满足以下条件:我需要学生在测试A上得到5分,另外他们需要在测试B和测试C上得分至少为4,在测试B和测试中得分为5 C也是。我该如何编写这个语法?谢谢。
答案 0 :(得分:0)
有几种方法可以解决这个问题。这是一个。 (为了举例,我正在假设字段名称和表格结构):
;
WITH A
as (
SELECT *
FROM Test
WHERE TestID = 'A'
)
, B
as (
SELECT *
FROM Test
WHERE TestID = 'B'
)
, C
as (
SELECT *
FROM Test
WHERE TestID = 'C'
)
-- Pull it all together
SELECT A.StudentID
, ScoreA = A.Score
, ScoreB = B.Score
, ScoreC = C.Score
FROM A
INNER JOIN B
ON A.StudentID = B.StudentID
INNER JOIN C
ON A.StudentID = C.StudentID
-- Filter
WHERE A.Score = 5
AND B.Score >= 4
AND C.Score >= 4
AND (B.Score = 5 or C.Score = 5)
这是基于以下假设:A,B和C的分数都在Test
表中的单独行中,并且您希望结果在同一行中包含所有三个分数。 / p>
如果它们已经在同一行中,您可以跳过CTE,只需使用WHERE
子句,并适当地重命名字段和前缀。