我正在尝试创建一个结果集,该结果集对与多个类别的所有排列的集合相匹配的雇员数量进行计数。这只是一个例子,因为实际细节无法共享,而且更加复杂。
我有两类:性别和阶级。性别具有男/女选项。类别具有1/2/3的选项。我使用了如下交叉连接来查找这两个类别(M / 1,M / 2,M / 3,F / 1,F / 2,F / 3)的所有六个排列
WITH
cteGender AS (SELECT Gender FROM Genders),
cteClass AS (SELECT Class FROM Classes)
SELECT * FROM cteGender CROSS JOIN cteClass
接下来,我有一个员工列表,其中包含列:姓名,性别,阶级。我的目标是创建一个结果集,以显示其性别和类别与排列集匹配的每位员工的人数,包括零人数。
类似这样的东西:
Gender Class EmployeeCount
---------------------------------
M 1 0
M 2 3
M 3 1
F 1 0
...
等等。谢谢您的帮助!
答案 0 :(得分:0)
您正在路上。 cross join
生成行。然后用left join
引入数据,用group by
聚合:
select g.gender, c.class, count(l.gender) as cnt
from genders g cross join
classes c left join
list l
on l.gender = g.gender and l.class = c.class
group by g.gender, c.class;