Sql server 当发现重复值时

Sql server 当发现重复值时,sql-server,if-statement,duplicates,case-when,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

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

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)。因此,查询必须首先对类列中的重复值进行分组,然后查看该组中的值是否满足位置条件。例如,我们首先将得到5x biology的类列分组,然后将其视为一个组,然后在该组中,如果存在一行位置为4A,一行位置为15B,则仅为biology赋值1。类列中几乎所有的值都有重复项

所需输出

Class       Location
Biology     1
Chemistry   0
English     0
Spanish     0

作为Tim Schmelter答案的替代方法,您也可以通过
左连接来实现这一点

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

@对不起,我是说生物学。我试着再解释一下。问题主要是将重复值作为一个组进行选择。组的大小无关紧要唯一重要的是,如果组中两个位置都存在,则分配1。@BobOutlook听起来不错,我很确定我和Tim当时都提供了答案。