当发现重复值时

时间:2018-10-30 10:53:52

标签: sql-server if-statement duplicates case-when

我想查询一个选择一列中所有重复值的查询。如果这些值满足条件,那么我希望查询仅返回那些值。

Class    Student_ID  Location
Biology     511         4A
Biology     512         15B
Biology     513         15B
English     514         6A
Biology     521         6A
Spanish     522         6A
Spanish     523         15B
Chemistry   524         4A
English     531         15B
Biology     532         4A
Chemistry   534         4A

在“类”列中选择所有重复的值,如果在这些值中同时在4A和15B中都有位置,则分配1。

CASE WHEN count(class) > 1 AND (Location = '4A' AND Location = '15B') THEN 1
 ELSE 0 END

最重要的是如何选择重复的值作为组,然后查看条件(位置必须为4A和15B)。因此,查询必须首先将来自类列的重复值进行分组,然后查看该组中的值是否满足位置条件。因此,例如,我们首先将类别列分组,得到5倍的生物学值,然后将其视为一组,然后在该组中,如果存在位置4A的一行和位置15B的一行,然后才为生物学分配值1。类别列中的几乎所有值都重复。

所需的输出

Class       Location
Biology     1
Chemistry   0
English     0
Spanish     0

1 个答案:

答案 0 :(得分:0)

作为蒂姆·施密特的答案的替代方法,您也可以使用LEFT JOIN来完成此操作。

SELECT yt1.Class, IIF(COUNT(yt2.Class) > 0, 1, 0) AS IsMatch
FROM YourTable yt1
LEFT JOIN YourTable yt2 ON yt1.Location = '4A' AND yt2.Location = '15B' AND
                           yt2.Class = yt1.Class
GROUP BY yt1.Class