大佬教程收集整理的这篇文章主要介绍了获取两个日期范围之间的重叠日期(在列中)-无需创建数据库对象,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 @H_422_3@microsoft sql Server 2016 中遇到了一个棘手的情况,我需要获取员工在 PayPeriod 中休假 (LOA) 的日期列表,其中有固定的 PeriodStart 和固定 PeriodEnd 列。
见下图(源数据集):
我在数据集的 5 行中有 4 名员工。
PeriodStart 和 PeriodEnd 始终固定,值分别为 Dec 15 和 Dec 22(2020 年)。我将每个员工的 LOA 开始日期和 LOA 结束日期放在不同的列中。源数据集在任何给定时间都只有一组 PeriodStart 和 PeriodEnd 日期。比如说,在上面的例子中,它总是 12 月 15 日和 12 月 22 日。在其他一些情况下,它将是 12 月 22 日和 12 月 29 日。但在给定时间只有一个范围。源数据集不能包含员工 X 的 Dec 15 - Dec 22 和员工 Y 的 Dec 22 - Dec 29。
所需的输出如下:
这里的挑战是,我正在使用我们客户的查询生成器,它不能使用 T-sql 对象,例如临时表 (#)、表变量 (@) 、通用表表达式 (CTE)、用户定义的函数甚至视图。
这是纯粹的临时报告,您只能在其中创建派生表(或子查询)并具有别名并将其用作数据集。这样的数据集可用于 JOIN 和其他常规内容。
例如:
SELECT a,b
FROM
(SELECT t1.a,t2.b
FROM table1 t1
INNER JOIN table2 t2
ON t1.ID = t2.ID) XYZ
派生表(或子查询)XYZ 是我的主要数据集。
我需要我想要的输出别名为 XYZ。
谁能帮我实现这个目标?
SELECT
yourTable.employeEID,DATEADD(DAY,calendar.date_id,yourTable.PeriodStart)
FROM
(
SELECT
ROW_numbER() OVER (ORDER BY the_priMary_key) - 1 AS date_id
FROM
any_big_enough_table
)
AS calendar
INNER JOIN
yourTable
ON calendar.date_id <= DATEDIFF(DAY,yourTable.PeriodStart,yourTable.PeriodEnd)
AND calendar.date_id >= DATEDIFF(DAY,yourTable.LOAStartDatE)
AND calendar.date_id <= DATEDIFF(DAY,yourTable.LOAEndDatE)
请原谅打字错误,我正在打电话。
以上是大佬教程为你收集整理的获取两个日期范围之间的重叠日期(在列中)-无需创建数据库对象全部内容,希望文章能够帮你解决获取两个日期范围之间的重叠日期(在列中)-无需创建数据库对象所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。