显示每个已定义类型的项目总数

时间:2018-05-11 21:32:23

标签: sql sql-server

我在SQL Server中有两个表:

物品

    Id int [PK]
    Name varchar
    TypeId int [FK -> ItemType.Id]

的ItemType

    Id int [PK]
    ItemTypeName varchar

我需要阅读每个Items属于ItemType的数量,因此结果表应如下所示:

Item Type | Items Count |
----------+-------------+
Type A    |  55         |
Type B    |  21         |
Type C    |  0          |
Type D    |  0          |

到目前为止我尝试的是这个查询:

select
    ItemType.ItemTypeName as [Item Type],
    count(*) as [Items Count] 
from 
    ItemType
inner join 
    Item on Item.TypeId = ItemType.Id
group by 
    ItemType.ItemTypeName

但它只显示Item Type,其中至少存在1 Item,而我需要显示已定义的所有Item Types,即使没有Items那种类型。

如何修改此查询以获得我想要的结果?

1 个答案:

答案 0 :(得分:4)

您正在寻找left join,但您还需要修复count()

select it.ItemTypeName as [Item Type],
       count(i.TypeId) as [Items Count] 
from ItemType it left join
     Item i
     on i.TypeId = it.Id
group by it.ItemTypeName;