从sql的开始和结束日期开始用视图归档列句点

vwhgwdsa  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(287)

我有一个从表a中选择值的视图

`SELECT 
     A.[Source]
    ,cast([ID] as varchar) AS ID 
    ,CASE
           WHEN  A.Source='1' THEN 'A'
           ELSE 'R' 
      END AS 'Type'
    ,[StartDate]
    ,[StartPeriod]
    ,[EndDate]
    ,[EndPeriod]
    ,[StatusDescription] 
    FROM [dbo].[A]

他们让我做一些转换,比如在这个算法中:
如果源=8,则
将初始记录按天数拆分为多行
a、 startperiod=“am”从第二条记录到最后一条记录。
a、 endperiod=“pm”除了最后一个。
例如,如果:
员工x的开始日期为:startdate startperiod enddate 26/04/2021 9:00:00 am 28/04/2021 9:00:00
会的

26/04/2021 9:00:00     AM        26/04/2021 9:00:00 
       27/04/2021 9:00:00     AM        27/04/2021 9:00:00   
       28/04/2021 9:00:00     AM        28/04/2021 9:00:00
u5i3ibmn

u5i3ibmn1#

递归cte是使用标准(ish)sql执行此操作的简单方法:

with cte as (
      select employee, startdate, enddate
      from t
      union all
      select employee, dateadd(day, 1, startdate), enddate
      from cte
      where startdate < enddate
     )
select *
from cte;

如果给定员工的工作时间超过100天,则需要添加 option (maxrecursion 0) .

相关问题