2013-03-24 75 views
1

這裏忽略多個結果是什麼,我被困在一個簡單的數據庫表示:憋屈稍微棘手的查詢,試圖基於單場

IDNumber  TimeSpent   Completed 
1    0     No 
1    0     No 
1    2     No 
2    0     No 
3    0     No 

我目前查詢數據庫本身...

"SELECT Distinct (IDNumber) AS Info FROM TestTable 
            ORDER BY WorkOrderNumber"; 

,這讓我回結果

1 
2 
3 

這是預期。

現在,我想將它調整到IDS號的任何實例,其中TimeSpent!= 0或Completed!= No意味着IDNumber根本不被抓取。因此,例如在給定的數據庫中,因爲TimeSpent = 2,所以我不希望在我的查詢中返回IDNumber 1。

我的第一反應是跳轉到這樣的事情...

"SELECT Distinct (IDNumber) AS Info FROM TestTable 
            WHERE TimeSpent='0' AND Completed='No' 
            ORDER BY WorkOrderNumber"; 

但很明顯,這是行不通的。它會正確地忽略IDNumber 1之一,但由於其他兩個仍然滿足WHERE子句,它仍然會返回1.

任何指針?

回答

2
SELECT DISTINCT IDNumber 
FROM TestTable 
WHERE IDNumber NOT IN 
    (SELECT IDNUmber FROM TestTable WHERE TimeSPent <> 0 OR Completed <> 'No') 
+0

工作很好。謝謝! – Hoser 2013-03-24 23:23:29

1

您可以用匯聚做到這一點,利用having條款:

select IDNumber 
from TestTable 
group by IDNumber 
having sum(case when TimeSpent = 0 then 1 else 0 end) = 0 and 
     sum(case when Completed = 'No' then 1 else 0 end) = 0 

having子句計數滿足每一個條件的行數。 = 0只是說沒有匹配。

我更喜歡聚合方法,因爲它可以根據您可以在組上設置的條件更靈活。