2013-01-13 44 views
1

我有一個表Request和表SearchRequest表具有ID列,該列是作爲RequestID的Search中的外鍵。在Search中可以有多個具有相同RequestID的行。還有另一列Search,狀態,可以是完整或不完整。我想的是,返回每個請求ID查詢:同時計數兩個不同的子行條件

RequestID - Count of Search rows with 'Complete' - Count of Search rows with 'Incomplete'

這是東西,可以很容易地用SQL做什麼?

回答

6

嘗試:

SELECT RequestId, 
SUM(CASE WHEN Status = 'Complete' THEN 1 ELSE 0 END), 
SUM(CASE WHEN Status = 'Incomplete' THEN 1 ELSE 0 END) 
FROM Search 
GROUP BY RequestId 

如果要列出即使沒有對這一請求進行搜索每一個請求ID,你可以這樣做:

SELECT r.Id, 
SUM(CASE WHEN s.Status = 'Complete' THEN 1 ELSE 0 END), 
SUM(CASE WHEN s.Status = 'Incomplete' THEN 1 ELSE 0 END) 
FROM Request r 
LEFT JOIN Search s ON r.Id = s.RequestId 
GROUP BY r.Id 

SQLFiddle

+0

而在如果沒有「搜索」行,您可以添加將NULL結果轉換爲0。 – ErikE

+0

你說得對,我編輯了我的答案。 –

+0

嗯我不認爲這件事情。我相當確定每個請求都保證至少有一次搜索,或者沒有生成請求。不過謝謝你的回答。 SQL絕對不是我的第一語言 – cost

相關問題