2013-02-03 31 views
1
╔════╦══════╦════════════╗ 
║ ID ║ NAME ║ WORK ║ 
╠════╬══════╬════════════╣ 
║ 1 ║ a ║ complete ║ 
║ 1 ║ a ║ complete ║ 
║ 2 ║ b ║ incomplete ║ 
║ 3 ║ c ║ complete ║ 
║ 4 ║ d ║ incomplete ║ 
║ 4 ║ d ║ complete ║ 
║ 5 ║ e ║ complete ║ 
║ 5 ║ e ║ complete ║ 
║ 5 ║ e ║ incomplete ║ 
║ 6 ║ f ║ incomplete ║ 
║ 6 ║ f ║ incomplete ║ 
╚════╩══════╩════════════╝ 

我想建立其只檢索ID爲所有的家庭作業完成或一個不完整的查詢建築,這個數據

例如在上述數據我想只有這些ID

查詢
1, 2, 3, 4, 5 

不是6,因爲它有一個以上的不完整的工作

+0

請添加問題到您的文章......和示例代碼的問題的解釋。 –

+1

http://stackoverflow.com/questions/14662025/building-a-sql-query-with-this-data/14662061可能的副本和答案在這裏提供http://stackoverflow.com/a/14662156/341117 –

回答

1

你應該能夠做這樣的事情與NOT EXISTS

SELECT DISTINCT H.ID 
FROM Homework H 
WHERE H.Work = 'Complete' 
    AND NOT EXISTS (
     SELECT * 
     FROM Homework H2 
     WHERE H2.Work != 'Complete' AND H2.ID = H.ID) 

這裏是SQL Fiddle

編輯 - 其實,只是注意到你還想要一個不完整的 - 讓我編輯。應該這樣做:

SELECT DISTINCT H.ID 
FROM Homework H 
GROUP BY H.ID 
HAVING COUNT(*) = 1 OR (
    NOT EXISTS (
    SELECT * 
    FROM Homework H2 
    WHERE H2.Work != 'Complete' 
     AND H2.ID = H.ID)) 

而更多的小提琴:http://sqlfiddle.com/#!3/c7d43e/3

好運。

+0

很簡單的查詢是在這裏http://stackoverflow.com/a/14662156/341117 –

+0

完全同意 - 一直在回答有關EXISTS的問題,只是在那個心態... – sgeddes

5
SELECT ID, Name 
FROM tableName 
GROUP BY ID, NAME 
HAVING SUM(CASE WHEN Work = 'Incomplete' THEN 1 ELSE 0 END) < 2 
+1

+1 - 比我的方法好多了:)是在存在的心態... – sgeddes

+0

@JohnWoo我認爲它應該是'計數(案例當工作='不完整'然後1 ELSE 0結束)<2' – codingbiz

+1

@codingbiz計數是不同於總和。考慮這個結果:'1,1,0,0'。 ** ** **結果是'2',而** count **返回'4'。 ':D' –