2017-10-15 139 views
1

我有這張表。 。SQL Server查詢 - 選擇ID計數()

ID item_ID status  
---------------------------- 
1  1  'available' 
2  1  'available' 
3  1  'available' 
4  1  'reserved' 
5  2  'available' 
6  2  'available' 
7  3  'reserved' 
8  3  'reserved' 
9  3  'reserved' 

我希望我的SQL查詢返回的結果如下:

item_ID quantity 
------------------ 
1   3  
2   2  
3   0  

請這方面的幫助。我對T-SQL不太瞭解。

+2

如果您發佈代碼,XML或數據樣本,請**在文本編輯器中高亮顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)以良好地格式化和語法突出顯示它! –

+0

謝謝,我會牢記這一點。 –

回答

3

你可以使用聚合,但首先你需要過濾只有 「可用」 的產品:

SELECT item_id, COUNT(*) as quantity 
FROM table 
WHERE status = 'available' 
GROUP BY item_id 
ORDER BY item_id; 

編輯:

要獲得0你可以使用:

SELECT s.item_id, COUNT(t.item_ID) AS quantity 
FROM (SELECT DISTINCT item_ID FROM table) s 
LEFT JOIN table t 
    ON s.item_ID = t.item_id 
AND t.status = 'available' 
GROUP BY s.item_id 
ORDER BY s.item_id; 
+0

我也這樣做了,但沒有顯示第三行。 –

+0

@FrankieFernandez當然,檢查uploaded – lad2025

+1

謝謝先生,它真的幫了我很多,並感謝您的快速響應。 –

2

還有一種方法是使用Sum與案例

select item_id, 
sum(Case when status='available' 
      then 1 else 0 end) as 'quantity 
from 
table 
group by item_id