主要用到了以下的方法:
select ROW_NUMBER() over(partition by A order by B ) as keyId from table
A :为分组字段
B:为分组后的排序字段。
keyId:分组编号
开发中遇到的需要在职员工的总数,需要按各种属性(部门、员工类型、班别班制等)进行分组后的部门人数再进行统计,避免以后遇到类似问题,写了个简化版供参考。
select GG.*,case keyId when 1 then empcount else null end as empcount from ( --去除重复值得到实际人数
select G.*,ROW_NUMBER() over(partition by ddate,deptname1,deptname2,deptname3,sex order by empno)as keyId from ---通过ROW_NUMBER() over(partition by) 标记分组相同的重复值
(
select a.*, b.empcount from hr_test a --人员表
left join
(select ddate,deptname1, deptname2, deptname3, sex, count(empno) empcount from hr_test group by --join入按日期、部门‘性别分组之后的人数
ddate,deptname1, deptname2, deptname3, sex) b
on a.ddate = b.ddate and a.deptname1 = b.deptname1 and a.deptname2 = b.deptname2 and a.deptname3 = b.deptname3 and a.sex = b.sex
) G
) GG