2016-05-26 51 views
0

下面是2表 -計數用的GroupBy查詢

JOBS 
JobID ProcessID Status 
j1 p1   Start 
j2 p2   Stop 
j3 p2   Running 
j4 p1   Start 
j4 p1   Stop 

表2

PROCESSES 
ProcessID Name ProcessGroup 
P1   P1Name G1 
P2   P2Name G2 
P3   P3Name G1 

成果爲預期

Process StartCount StopCount 
P1Name  2   1 
P2Name  0   1 

我想通過查詢上述輸出使用組。

select jobId,p.Name, COUNT(j.j.JobID) as StartCount 
from JOBS j, 
PROCESSES p 
where j.Status = 'Start' and 
     j.ProcessID= p.ProcessID 
group by j.Status 

在單個查詢中,我可以只計算Start或StopCount。我可以在一個查詢中獲得兩個嗎?

+0

什麼是你的RDBMS,Oracle或SQL Server?如果SQL Server然後是2005年,2008年或2012年? –

+0

常規GROUP BY規則說: 如果指定了GROUP BY子句,則SELECT列表中的每個列引用都必須標識分組列或者作爲set函數的參數。 – jarlh

+0

SQL Server 2008 –

回答

5

您可以使用條件聚集此:

select p.Name, 
     count(case when Status = 'Start' then 1 end) as StartCount, 
     count(case when Status = 'Stop' then 1 end) as StopCount 
from JOBS j 
join PROCESSES p on j.ProcessID = p.ProcessID  
group by p.Name 
+1

感謝您重新查詢查詢以包含明確的'JOIN'而不是25年前的隱式語法! – MatBailie