【发布时间】:2013-12-28 09:52:55
【问题描述】:
我在 SQL Server 2008 上有以下数据库:
用户表:
id Name Country BloodTypeId
---------+---------------+------------+-----------------+
1 John US 1
2 Kate China 1
3 Sam US 2
4 Tom Canada 1
5 Mike US 1
6 Carol China 3
7 Daniel US 2
8 Joseph US 1
9 Mary US 3
10 Peter China 1
血型表
BloodTypeId BloodTypename
------------+------------------+
1 A
2 B
3 O
4 AB
我需要一个 sql 脚本来返回每个国家的血型数量: 所以对于上面的数据库,我需要它返回:
Country BloodType Count
---------+---------------+------------+
US A 3
US B 2
US O 1
US AB 0
China A 2
China B 0
China O 1
China AB 0
Canada A 1
Canada B 0
Canada O 0
Canada AB 0
请注意,当某个国家/地区没有特定血型的用户时,我需要它以 0 计数显示。
我尝试了什么: 我尝试了以下脚本:
SELECT Country, BloodTypename as BloodType, COUNT(1) as Count
FROM Users
JOIN Bloodtypes
ON Users.BloodtypeId = Bloodtypes.BloodtypeId
GROUP BY Country, BloodTypename
ORDER BY Country
这个查询给了我这个结果:
Country BloodType Count
---------+---------------+------------+
US A 3
US B 2
US O 1
China A 2
China O 1
Canada A 1
没有出现计数为0的血型
我尝试改用RIGHT JOIN:
SELECT Country, BloodTypename as BloodType, COUNT(1) as Count
FROM Users
RIGHT JOIN Bloodtypes
ON Users.BloodtypeId = Bloodtypes.BloodtypeId
GROUP BY Country, BloodTypename
ORDER BY Country
但仍然得到相同的结果
我如何选择我需要的并包括所有血型,甚至是计数为 0 的血型?
非常感谢
【问题讨论】:
标签: sql sql-server-2008 count