Sql server 查询条件符合SQL Server的唯一数据库

Sql server 查询条件符合SQL Server的唯一数据库,sql-server,Sql Server,我有一张这样的桌子: Claim | Flag -------------------- 2657 | 5 2657 | 5 2657 | 5 2657 | 2 2659 | 5 2659 | 5 2659 | 5 我想查询具有以下条件的记录:声明具有标志“5”,并且也没有标志=“2”。 例如,在本例中:权利要求2657具有标志“5”,但也具有标志“2”

我有一张这样的桌子:

Claim      |    Flag
--------------------
2657       |    5
2657       |    5
2657       |    5
2657       |    2
2659       |    5
2659       |    5
2659       |    5
我想查询具有以下条件的记录:声明具有标志“5”,并且也没有标志=“2”。 例如,在本例中:权利要求2657具有标志“5”,但也具有标志“2”。所以我们跳过它。 只需查询索赔“2659”

请帮助我在SQl Server中编写查询以满足此条件。

这是一个无余数的关系除法(RDNR)问题。请看德温营地的这篇文章,它为这类问题提供了许多解决方案


如果要指定记录不应具有
标志=2
,则可以执行以下操作:


另一种方法是使用
groupby
和条件
have
(类似于Wewesthemenance方法1)如下

SELECT c.Claim
FROM Claims c
GROUP BY c.Claim
HAVING
    SUM(CASE WHEN c.Flag = 5 THEN 1 ELSE 0 END) > 1
    AND SUM(CASE WHEN c.Flag = 2 THEN 1 ELSE 0 END) = 0

这可以对您的问题进行排序

选择索赔 从索赔
GROUP BY CLAIM HAVING COUNT(DISTINCT FLAG)=1

您能告诉我们您已经尝试了什么吗?您能发布您想要的输出吗?问题有点不明确选择CLAIM,表中的标志2您应该在SQL中使用“not exists”/“exists”进行查看,这可能就是你想要的,我想这比我的第一个解决方案要快+1.
SELECT DISTINCT s.Claim
FROM SampleData s
WHERE
    s.Flag IN(5)
    AND NOT EXISTS(
        SELECT 1 FROM SampleData WHERE Claim = s.Claim AND Flag = 2
    )
SELECT c.Claim
FROM Claims c
GROUP BY c.Claim
HAVING
    SUM(CASE WHEN c.Flag = 5 THEN 1 ELSE 0 END) > 1
    AND SUM(CASE WHEN c.Flag = 2 THEN 1 ELSE 0 END) = 0