首页 > 解决方案 > 查找每个排列的匹配项数

问题描述

我正在尝试创建一个结果集,该结果集计算与多个类别的所有排列匹配的员工数量。这只是一个例子,因为真实的细节无法共享并且更复杂。

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

等等。感谢您的任何帮助!

标签: sqlsql-server

解决方案


你在路上。Across 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;

推荐阅读