2016-01-05 11 views
-3

現在我已經停留了3個小時。我很抱歉不得不在這裏問這個問題,但我無法完成。僅返回子查詢中從不發生的值

我有兩列的表。列A稱爲「過程」,列B稱爲「完成」。如果有一個過程沒有完成的情況(因此B列中的值爲「0」),我根本不想讓它返回。

我嘗試使用子查詢是這樣的:

SELECT A 
FROM TABLE 
WHERE A NOT IN (SELECT A FROM TABLE WHERE B = 0); 

儘管如此,這給了我重視我不想。我真的不明白爲什麼這不起作用。我基本上只想要返回的過程只有B列中的值爲1。

+1

也許您在'B'列中有兩個以上的值。 –

+0

做一個由A組選擇TABLE並查看是否有計數(*)> 1.除非有主鍵,否則不能保證每個A的值都超過1個A – Rawheiser

+0

您沒有可以很好地解釋爲什麼'B <0>或'B = 1'不適合你。它是否爲空值? – shawnt00

回答

0

這是一個非常簡單的修復方法,但我認爲這更接近您之後的內容。

SELECT A 
FROM TABLE 
WHERE A IN (SELECT A FROM TABLE WHERE ISNULL(B, 0) = 1); 

說明:此拉回只值,其中B爲1,和爲0的B值排除記錄(以及NULL)...這可能會導致一些問題,如果它是一個表,作業可以然而,重新啓動。如果你有相同值的多個行,你想確保個個有B被設定爲完成

select A from TABLE where B = 1 

1

爲什麼這不會爲你工作,目前尚不清楚:

select A from TABLE group by A having min(B) = 1 
select A from TABLE group by A having count(*) = count(case when B = 1 then 1 end) 
select A from TABLE group by A having count(*) = sum(B) /* might not work */ 

唯一的問題是,我認爲最後一個查詢與您已經擁有的查詢相同。

0

如果你的數據表正是你怎麼說,你的查詢應正常工作。實現這一點的另一種方式,但會改變從B = 0的子查詢到B <> 1.

SELECT A 
FROM TABLE 
WHERE A NOT IN (SELECT A FROM TABLE WHERE B <> 1); 

而且,你有什麼數據類型?您可能需要將您的值放在單引號中(即,更改<> 1到<>'1')