查找每个排列的匹配项数

时间:2019-01-28 13:18:00

标签: sql sql-server

我正在尝试创建一个结果集,该结果集对与多个类别的所有排列的集合相匹配的雇员数量进行计数。这只是一个例子,因为实际细节无法共享,而且更加复杂。

我有两类:性别和阶级。性别具有男/女选项。类别具有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
    ...

等等。谢谢您的帮助!

1 个答案:

答案 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;