我需要创建人员更替报告,该报告应根据参数化期间显示以下信息:
目前,我有一些想法如何获得报告。为每个期间创建缓慢变化的维度或复制员工表的快照,或者为每个payrun分别跟踪启动者和离开者。我尝试过慢慢改变尺寸,它在新手上做得很好;然而,它离开了失败者。我不确定每个payruns的跟踪启动器和离线是否有效。
创建下表作为解决方案的开始
我在MS SQL 2008业务方面相对较新。请提出。主要目标是确定员工流动率最高的管理人员和签约地点。
备注 - 目前,我没有使用任何特定的技术并寻找解决方案。
- 我打算为了报告而构建和设计一个全新的数据库。通过数据库我指的是位于CRM数据库(SQL 2008)上的一些表集合。通过表格集合我指的是经理的“维度”表,签约网站的“维度”表和员工表。所以目前,我认为我的解决方案应该至少有3个表;但是,我的技能并不能解决难题。
我认为上面有表可以让我编写一个SQL查询,可以比较不同的时期并获得所需的结果。
payno depcod Idd Imported
12568 EDE322001 12568EDE322001A 2011年12月31日
12568 EDE322001 12568EDE322001B 2011年12月31日
16822 EDE322001 16822EDE322001A 2011年12月31日
17694 EDE322001 17694EDE322001A 2011年12月31日
12568 EDE322001 12568EDE322001A 2012年1月4日
12568 EDE322001 12568EDE322001B 2012年1月4日
16822 EDE322001 16822EDE322001A 2012年1月4日
17694 EDE322001 17694EDE322001A 2012年1月4日
12568 EDE322001 12568EDE322001A 2012年1月31日
12568 EDE322001 12568EDE322001B 2012年1月31日
16822 EDE322001 16822EDE322001A 2012年1月31日
17694 EDE322001 17694EDE322001A 2012年1月31日
17661 EDE322001 17661EDE322001A 2012年1月31日
12568 EDE322001 12568EDE322001A 2012年2月1日
12568 EDE322001 12568EDE322001B 2012年2月1日
16822 EDE322001 16822EDE322001A 2012年2月1日
17906 EDE322001 17906EDE322001A 2012年2月1日
17907 EDE322001 17907EDE322001A 2012年2月1日
12568 EDE322001 12568EDE322001A 2012年2月29日
12568 EDE322001 12568EDE322001B 2012年2月29日
17907 EDE322001 17907EDE322001A 2012年2月29日
上面的表是快照表。快照日期显示在“导入的列”中。 (用于凌乱表格的applogoes;我无法弄清楚如何制作表格)现在我需要找到一个如何比较一个日期与另一个日期(理想情况下在循环中)以找出第一个日期和下一个日期之间的差异。 / p>
例如,17661 EDE322001 17661EDE322001A 2012年1月31日是新员工,2012年2月1日16822 EDE322001 16822EDE322001A是离职人员。
非常感谢
答案 0 :(得分:0)
考虑到所有关于缓慢变化的维度等的讨论,我可能会过于简单地看待这个问题,但是对于一些普通的SQL来说有什么问题?我将假设您有一个包含Manager,ContractedSite,StartDate和EndDate字段的Employee表。
您需要以下内容:
因此,您需要从数据中提取一些特定案例:
SELECT Manager, ContractedSite,
SUM(CASE WHEN StartDate < @PeriodStart AND ((EndDate IS NULL) OR (EndDate >= @PeriodStart)) THEN 1 END) AS OpeningStaff,
SUM(CASE WHEN StartDate >= @PeriodStart AND StartDate <= @PeriodEnd THEN 1 END) AS Starters,
SUM(CASE WHEN EndDate >= @PeriodStart AND EndDate <= @PeriodEnd) THEN 1 END) AS Leavers,
SUM(CASE WHEN StartDate <= @PeriodEnd AND ((EndDate IS NULL) OR (EndDate > @PeriodEnd)) THEN 1 END) AS ClosingStaff
FROM Employee
WHERE (StartDate <= @PeriodEnd) AND ((EndDate IS NULL) OR (EndDate >= @PeriodStart))
GROUP BY Manager, ContractedSite
ORDER BY Manager, ContractedSite
现在,您只需要在报告中计算OpeningStaff和ClosingStaff之间的差异,即可获得营业额。