Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于当前时间点的部门,对员工历史记录表进行独立计数_Sql_Sql Server_Database_Count_Powerbi - Fatal编程技术网

Sql 基于当前时间点的部门,对员工历史记录表进行独立计数

Sql 基于当前时间点的部门,对员工历史记录表进行独立计数,sql,sql-server,database,count,powerbi,Sql,Sql Server,Database,Count,Powerbi,因此,我有一个employee表,其中包含自开始以来所有employee的数据。在数据中,我有我需要的所有数据。我有员工的startdate,enddate null(如果没有),我有部门的名称,如果某个部门已更改,则该特定员工有一个新行,带有一个新的部门值,以及两个名为DepValidFrom和DepValidto的列,日期格式,确定当前员工在该特定部门的时间段 我的目标是,将所有部门列为行,以年和月为列,以该部门当时的员工人数作为值,形成一个矩阵。我有所有的数据,我只是找不到确切的方法来编写

因此,我有一个employee表,其中包含自开始以来所有employee的数据。在数据中,我有我需要的所有数据。我有员工的startdate,enddate null(如果没有),我有部门的名称,如果某个部门已更改,则该特定员工有一个新行,带有一个新的部门值,以及两个名为DepValidFrom和DepValidto的列,日期格式,确定当前员工在该特定部门的时间段

我的目标是,将所有部门列为行,以年和月为列,以该部门当时的员工人数作为值,形成一个矩阵。我有所有的数据,我只是找不到确切的方法来编写我的PowerBI度量,甚至可能是SQL查询

所以。。。。我正试图将其纳入Power BI,我得到了一个不完整的视图。我希望我的数据如下所示:

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。