我有一个CTE,其中包含以下语句,以获取一天中用户的总休息时间.
CTEBreak as
(
select max(name) as Name
,sum(DurationInHours) as HourlyBreak
,Work_Day
from ctesemifinal
where id in (4130)
group by Work_Day
)
Run Code Online (Sandbox Code Playgroud)
这会返回如下结果:

但是,如果他们没有休息一天,它会导致:

有些日子不包括在内,因为他没有休息.我想要的是在用户没有休息的日子里强制插入'1'.我该如何做到这一点?谢谢!
顺便说一下,Work_Day列是实际日期的日期名称(以防它可能会发挥作用)
您需要向SQL Server提供要包含在查询中的所有数据,可以从数据库中的表中,通过计算或通过显式包含它来提供.
在您的情况下,您可以通过添加另一个cte包含您的一周中的日期以及left join从那里到您的CTEBreak日期来明确地将其包含在此处:
with
...
,CTEBreak as (...)
,CTEWorkdays(wd) as (select 'Monday' union all
select 'Tuesday' union all
select 'Wednesday' union all
select 'Thursday' union all
select 'Friday'
)
select isnull(b.HourlyBreak,1) as HourlyBreak
,w.wd as Work_Day
from CTEWorkdays as w
left join CTEBreak as b
on w.wd = b.Work_Day
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |