查询条件遵循SQL Server的唯一数据库

时间:2015-06-19 04:58:28

标签: sql-server

我有一张这样的表:

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中编写查询以满足此条件。

3 个答案:

答案 0 :(得分:1)

这是 关系部门,没有剩余(RDNR) 问题。请参阅Dwain Camps的article,为这类问题提供了许多解决方案。

SQL Fiddle #1

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,则可以执行以下操作:

SQL Fiddle #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

SQL Fiddle

答案 2 :(得分:0)

这可以解决您的问题

选择索赔 来自索赔 按类别划分的群组(DISTINCT FLAG)= 1