如何解决在T-SQL中构建HR数据集,需要一个行开始日期列和一个行结束日期列
我有HR数据集问题。对于职位,我有职位详细信息,例如类别,类型等。 这些详细信息随时间变化并且彼此独立,从而产生以下数据集:
Position StartDate EndDate
1 '2020-01-01' '3000-01-01'
Position Type StartDate EndDate
1 'Part-time' '2020-01-01' '2020-07-31'
1 'Full-time' '2020-08-01' '2020-08-30'
1 'Part-time' '2020-09-01' '3000-01-01
Position Category StartDate EndDate
1 'Agency' '2020-01-01' '2020-06-30'
1 'Employee' '2020-07-01' '2020-08-30'
1 'Contractor' '2020-09-01' '3000-01-01
因此,我想获得一个数据集,例如:
Position Type Category StartDate EndDate
1 'Part-time' 'Agency' '2020-01-01' '2020-06-30'
1 'Part-time' 'Employee' '2020-07-01' '2020-07-31'
1 'Full-time' 'Employee' '2020-08-01' '2020-08-30'
1 'Part-time' 'Contractor' '2020-09-01' '3000-01-01'
这样,当按日期过滤时,它将带回该日期该位置的情况。对于“ 2020-07-05”上的示例,该职位将显示为兼职员工。
到目前为止,我研究的方法包括用于创建StartDate和EndDate字段的CASE语句
并创建数据集的并集,然后运行ROW_NUMBER()OVER(位置按OVER BY StartDate,EndDate)以尝试在连接这些表时滤除错误的行。
编辑:抱歉,我应该添加,这是问题的最小示例。我正在看的示例将有6-12列。因此,该解决方案将需要可扩展。
解决方法
我选择的方法是在Types和Categories表之间应用CROSS JOIN,并通过两个表的重叠阶段进行过滤。
SELECT * FROM Position p
INNER JOIN Type t
ON t.Position = p.Position
CROSS JOIN Category c
WHERE c.StartDate >= t.StartDate AND c.StartDate <= t.EndDate
OR (t.StartDate >= c.StartDate AND t.StartDate <= c.EndDate)
OR (c.StartDate < t.StartDate AND c.EndDate > t.EndDate)
ORDER BY t.StartDate
在SELECT列表中,您可以应用CASE语句为您的日期范围选择正确的日期。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。