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