我正在尝试编写一个包含复杂约束的查询(至少对我来说是这样)。我需要从我的数据库中提取学生数据行,显示他们在三个测试(测试表中的测试A、测试B和测试C)中的分数。我需要满足以下标准:我需要学生在考试A中的分数恰好为5分,此外,他们需要在考试B和考试C中至少有4分,在考试B和考试C中的分数为5。我该如何编写它的语法呢?谢谢。
发布于 2016-08-05 00:10:53
有几种方法可以解决这个问题。这里有一个。(为了举例,我对字段名和表结构做了一些假设):
;
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表中的单独行中,并且您希望结果在同一行中包含所有三个分数。
如果它们都在同一行中,则可以跳过CTE,只使用WHERE子句,并对字段和前缀进行适当的重命名。
https://stackoverflow.com/questions/38772064
复制相似问题