2017-06-12 49 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 
相關問題