2017-09-13 32 views
0

我有項目 - 問題,一對多的關係。集團與案件

我希望每個項目的待處理問題和已完成問題。

所以,我做了什麼

SELECT 
    a.id , 
    a.Name, 
    SUM(CASE WHEN b.StatusId = 3 THEN 1 ELSE NULL END) AS CompletedIssues, 
    SUM(CASE WHEN b.StatusId != 3 THEN 1 ELSE NULL END) AS PendingIssues 
FROM 
Projects a 
    JOIN Issues b 
     ON a.ID = b.ProjectId 
GROUP BY 
a.name, 
b.StatusId, 
a.ID 

但它不給予適當的輸出。見下面的捕捉。

enter image description here

有基於問題狀態ID(見BT5),用於完成和懸而未決的問題兩個單獨的行,有時超過2行。

是否在這種情況下出錯?

實現此目的的正確方法是什麼?

回答

2

解決您的group by

select p.id, p.Name, 
     sum(case when i.StatusId = 3 then 1 else null end) as CompletedIssues, 
     sum(case when i.StatusId <> 3 then 1 else null end) as PendingIssues 
from Projects p join 
    Issues i 
    on p.ID = i.ProjectId 
group by p.name, p.id; 

注意:您可能不希望else NULL。通常情況下,你想數是零,而不是NULL

select p.id, p.Name, 
     sum(case when i.StatusId = 3 then 1 else 0 end) as CompletedIssues, 
     sum(case when i.StatusId <> 3 then 1 else 0 end) as PendingIssues 
from Projects p join 
    Issues i 
    on p.ID = i.ProjectId 
group by p.name, p.id; 

而且,我改變了表的別名爲更有意義。不要使用無意義的字母,如ab。使用表縮寫。

+0

明白了,謝謝,這是完美的答案..我有我的statusID問題.. – Bharat