2017-05-03 42 views
0

我有如下表一表:查詢由組和where子句,保持空值

項目,產品,狀態

狀態可能是正在進行中,已完成,失敗

我想三個不同的表格,列出每個產品的特定狀態的項目數量。我可以通過計數項目,分組條件和狀態條件來做到這一點。和得到的東西,如:

對於項目狀態=進行中:

Product Items 
A  10 
B  20 

和兒子。

但是,如何保留count(items)= 0的產品?如果我把條件放在哪裏,這些產品會被過濾掉。

我怎樣才能像

Product Items 
A  10 
B  20 
C  0 
D  0 

我使用Oracle SQL

這是我使用查詢:

select product, count(item) from item_main 
where status = 'In Progress' 
group by product; 
+0

可以顯示原始表以及? –

+0

原始表格包含更多其他專欄,不幸的是我不確定我可以將它放在這裏,因爲它是公司數據。但基本上,我只是想要每個類別的項目總數,對於每個項目狀態。 –

+0

我用我使用的查詢更新了我的問題。在此查詢中,我錯過了類別,其中count(item)= 0 –

回答

2
SELECT Product, 
     COUNT(CASE status WHEN 'In Progress' THEN 1 END) AS Items 
FROM your_table 
GROUP BY Product 
+0

'select product as label, count(case STATUS where'In Progress'then 1 else 0 end)as item, from item_main group by product; ' - 不起作用。 –

+0

不知何故拋出錯誤:缺少正確的缺陷。我在這裏錯過了什麼? –

+0

在「'as items,from'」中有一個額外的逗號,並且你不希望'else 0'部分或者省略它或者使用'else NULL'(因爲零是可數的,但是NULL不是)。 – MT0

0
SELECT a.product, count(b.product) from 
(select product from item_main group by product) a LEFT JOIN item_main b on a.product = b.product 
where b.status = 'In progress'