“where”子句

时间:2016-08-04 15:52:08

标签: sql sql-server-2008

我正在尝试编写一个包含复杂约束的查询(至少对我而言)。我需要在我的数据库中从三个测试(测试A,测试B和来自TEST表的测试C)中提取显示其分数的学生数据行。我需要满足以下条件:我需要学生在测试A上得到5分,另外他们需要在测试B和测试C上得分至少为4,在测试B和测试中得分为5 C也是。我该如何编写这个语法?谢谢。

1 个答案:

答案 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子句,并适当地重命名字段和前缀。