2017-09-13 69 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