SQL Server - 根据ID获取值,其中另一列没有所有值

时间:2016-08-03 22:56:32

标签: sql-server sql-server-2008 sql-server-2012

这可能很简单,但我对sql server和高级用法不太熟悉。基本上我无法为此形成查询。

我的桌子如下所示。每个ID的类型只有3个值(0,1,2)。

ID      Type
40271   0
40271   1
40271   2
40281   0
40281   1

我想只选择没有所有类型的ID。

输出(由于缺少第3种类型,即2):

    ID      Type
    40281   0
    40281   1

我需要从表中选择所有行,对于每个ID,所有类型(0,1,2)都不存在。

我试过分组,有等条款,但无法到达那里。

我尝试了这个,但它给了我两个ID

select ID 
    from Table
    group by ID
    having count(distinct Type) > 1

2 个答案:

答案 0 :(得分:2)

一种方法是使用EXISTS检查ID是否少于三种类型。

SELECT ID, Type
FROM Table T
WHERE EXISTS (
    SELECT 1
    FROM Table
    WHERE ID = T.ID
    GROUP BY ID
    HAVING COUNT(DISTINCT Type) < 3);

答案 1 :(得分:-1)

试试这个

select t.* from test1 t, 
  (select id, count(*) cnt from test1 group by id) t1
where t.id = t1.id
   and t1.cnt < 3