2017-06-12 45 views
-2

我试图获取所有只有零的Id行。只有一个发生时才返回行

Id | valid 
    ---| ------ 
    1 | 0 
    1 | 1 
    2 | 0 
    2 | 0 
    3 | 1 
    4 | 0 
    4 | 1 
    5 | 0 
    6 | 1 
+2

[ “去哪儿”(https://msdn.microsoft.com/fr-fr/library/ms188047.aspx) –

+0

集团通过+有最大值= 0或总和值= 0那些也会这样做,左连接而不是它 –

回答

1
SELECT ID 
FROM myTable 
WHERE Valid = 0 
    AND ID NOT IN (
     SELECT ID 
     FROM myTable 
     WHERE Valid != 0 
     ) 
0

如果您的ID具有只由零的有效这笔款项将为零。这是一个代码示例。

drop table if exists dbo.Table03; 

create table dbo.Table03 (
Id int 
, valid int 
); 

insert into dbo.Table03 (Id, valid) 
values (1, 0), (1, 1), (2, 0), (2, 0), (3, 1), (4, 0), (4, 1), (5, 0), (6, 1); 


select 
t.Id 
from dbo.Table03 t 
group by t.Id 
having SUM(t.valid) = 0 
+0

虽然这段代码可能回答这个问题,但提供关于如何和/或为何解决问题的附加上下文会改善答案的长期值。 – Badacadabra

0

您可以使用LEFT JOINNULL检查,以达到您预期的结果。

样品执行与给定的数据:

DECLARE @TestTable TABLE (Id int, valid int); 

INSERT INTO @TestTable (Id, valid) 
VALUES (1, 0), (1, 1), (2, 0), (2, 0), (3, 1), (4, 0), (4, 1), (5, 0), (6, 1); 

SELECT T1.* 
FROM @TestTable T1 
LEFT JOIN @TestTable T2 ON T2.Id = T1.Id AND T2.valid <> 0 
WHERE T2.Id IS NULL 

结果:

Id valid 
---------- 
2 0 
2 0 
5 0 

如果你想Id唯一的,使用SELECT DISTINCT T1.Id

0

另一个选择

Select A.* 
From YourTable A 
Join (
     Select ID 
     From YourTable 
     Group By ID 
     Having min(valid)=0 and max(valid)=0 
     ) B 
    on A.ID=B.ID 

返回

Id valid 
2 0 
2 0 
5 0