[英]How to display rows with no count aggregate result?
我有一张表,其中包含 Job、City 和 PersonName (在该城市工作) 。 即使没有人在那个城市工作,我也想返回所有工作和城市。 这是一个简单的例子:
表的创建:
CREATE TABLE #Data
(
Job varchar(50),
City varchar(50),
PersonName varchar(50)
)
INSERT INTO #Data
VALUES
('Teacher', 'New-York', 'John')
,('Teacher', 'Los-Angeles', 'Mary')
,('Fireman', 'New-York', 'Sam')
我的查询
SELECT
[Job]
, [City]
,COUNT(PersonName) AS NumberOfPeopleWorkingThere
FROM #Data
GROUP BY [Job], [City]
ORDER BY [Job], [City]
我的结果
Fireman New-York 1
Teacher Los-Angeles 1
Teacher New-York 1
但我想拥有:
Fireman Los-Angeles 0 -> this row in addition
Fireman New-York 1
Teacher Los-Angeles 1
Teacher New-York 1
我不知道如何做到这一点,你能帮我吗?
这回答了问题的原始版本。
使用cross join
生成行,然后left join
:
SELECT j.job, c.city,
COUNT(PersonName) AS NumberOfPeopleWorkingThere
FROM (SELECT DISTINCT job FROM #Data) j CROSS JOIN
(SELECT DISTINCT city FROM #Data) c LEFT JOIN
#Data d
ON d.job = j.job AND d.city = c.city
GROUP BY j.job, c.city
ORDER BY j.job, c.city;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.