Sql 基于当前时间点的部门,对员工历史记录表进行独立计数
因此,我有一个employee表,其中包含自开始以来所有employee的数据。在数据中,我有我需要的所有数据。我有员工的startdate,enddate null(如果没有),我有部门的名称,如果某个部门已更改,则该特定员工有一个新行,带有一个新的部门值,以及两个名为DepValidFrom和DepValidto的列,日期格式,确定当前员工在该特定部门的时间段 我的目标是,将所有部门列为行,以年和月为列,以该部门当时的员工人数作为值,形成一个矩阵。我有所有的数据,我只是找不到确切的方法来编写我的PowerBI度量,甚至可能是SQL查询 所以。。。。我正试图将其纳入Power BI,我得到了一个不完整的视图。我希望我的数据如下所示:Sql 基于当前时间点的部门,对员工历史记录表进行独立计数,sql,sql-server,database,count,powerbi,Sql,Sql Server,Database,Count,Powerbi,因此,我有一个employee表,其中包含自开始以来所有employee的数据。在数据中,我有我需要的所有数据。我有员工的startdate,enddate null(如果没有),我有部门的名称,如果某个部门已更改,则该特定员工有一个新行,带有一个新的部门值,以及两个名为DepValidFrom和DepValidto的列,日期格式,确定当前员工在该特定部门的时间段 我的目标是,将所有部门列为行,以年和月为列,以该部门当时的员工人数作为值,形成一个矩阵。我有所有的数据,我只是找不到确切的方法来编写
Department | Jan | Feb | Mar | Apr |
Dep1 | 3 | 5 | 6 | 4 |
Dep2 | 2 | 3 | 2 | 3 |
Dep3 | 1 | 1 | 2 | 3 |
现在我只是使用一个非常简单的distinctCountComp_表[EmployeeInitials],它给了我一个不完整的视图,因为它只计算特定的日期,没有将数字保留到总数中,留下一堆空值
我希望有人能理解我的意思,有人能帮助我
谢谢 您可以先取消日期提示,然后生成一个查询,给出每个部门和日期的员工人数:
select e.dept, x.dt, sum(cnt) over(partition by dept order by dt) cnt
from employees e
cross apply (values (startdate, 1), (enddate, -1)) as x(dt, cnt)
where dt is not null
然后,您可以执行条件聚合以透视结果-这需要枚举日期,但:
select dept,
max(case when dt >= '20200101' and dt < '20200201' then cnt else 0 end) cnt_202001,
max(case when dt >= '20200201' and dt < '20200301' then cnt else 0 end) cnt_202002,
...
from (
select e.dept, x.dt, sum(cnt) over(partition by dept order by dt) cnt
from employees e
cross apply (values (startdate, 1), (enddate, -1)) as x(dt, cnt)
where dt is not null
) t
group by dept
P>当员工在月中旬更换时,在两个月内都会统计。< / P>请提供样本数据。另外,如果有人在这个月中旬改变,这个人会在哪里被计算?嗨!谢谢你的意见。我试着实现你写的东西,我得到了一些东西,然而,有几个月,它只给了我一个0值,即使在这段时间里部门里肯定有人。有一个例子,3月份的数字是10人,4月份是0,5月份是11人。我通过以下方式进行检查:其中,DWValidFromDate和DWValidToDate之间的dept='1st lev'和'20201201'将返回一个包含11名员工的表,而计数方法将返回2019年12月的0。如果这对您有任何帮助,我将在这里向您展示我正在使用的确切列。还有更多,但这些是我认为相关的。列:[Dept]、[EmployeeInitials]、[Name]、[IsCurrent]、[DWValidFromDate]、[DWValidToDate]。例如,两次同一个人:第一列夫,JJO,约翰·约翰逊,012019-01-01 00:00:00.000,2019-09-16 00:00:00:00.000第一列夫,JJO,约翰·约翰逊,1199-09-17 00:00:00:00.000,9999-12-31 00:00:00.000。因此,这个人有一点变化,但在同一个部门。因此,从生效日期到结束日期之间的每个月应计算+1。