SQL force插入虚拟数据

Jor*_*ato 3 sql sql-server

我有一个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列是实际日期的日期名称(以防它可能会发挥作用)

iam*_*ave 5

您需要向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)