我有一张这样的表:
Claim | Flag
--------------------
2657 | 5
2657 | 5
2657 | 5
2657 | 2
2659 | 5
2659 | 5
2659 | 5
我想查询具有条件的记录是声明具有Flag'5'并且也没有Flag ='2'。 例如,在这种情况下:权利要求2657具有标志'5',但也具有标志'2'。所以我们跳过它。 只需查询声明'2659'。
请帮我在SQl Server中编写查询以满足此条件。
答案 0 :(得分:1)
这是 关系部门,没有剩余(RDNR) 问题。请参阅Dwain Camps的article,为这类问题提供了许多解决方案。
SELECT s.Claim
FROM SampleData s
WHERE s.Flag IN(5)
GROUP BY s.Claim
HAVING
COUNT(DISTINCT s.Flag) = 1
AND COUNT(DISTINCT s.Flag) = (
SELECT
COUNT(DISTINCT Flag)
FROM SampleData
WHERE Claim = s.Claim
)
如果您想指定记录不应该有Flag = 2
,则可以执行以下操作:
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
)
答案 1 :(得分:1)
另一种方法是将GROUP BY
与条件HAVING
(类似于wewesthemenace方法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
答案 2 :(得分:0)
这可以解决您的问题
选择索赔 来自索赔 按类别划分的群组(DISTINCT FLAG)= 1