2017-10-15 135 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