我的 CTE 计数 return 为空白,如何才能将其 return 设为 0?

My count CTE returning blanks, how can I get it return as 0?

创建 CTE 是为了计算从今天到当月月底剩余的天数。所以我今天(2021 年 3 月 30 日)的报告没有计算明天的日期 2021 年 3 月 31 日。

   declare @DespatchTo Date = '03-30-2021'

   WITH mycte AS
    (
      SELECT CAST(Convert(date,getdate()) AS DATETIME) DateValue
      UNION ALL
      SELECT  DateValue + 1
      FROM    mycte   
      WHERE   DateValue  < DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @DespatchTo) + 1, 0)) --03-31-2021
    )
    
    SELECT SUN.Count as SunCount, SAT.Count as SatCount, WK.Count as WeekCount
    FROM 
    (SELECT  count(*) as Count
    FROM    mycte
    WHERE DatePart("w",DateValue) = 1
    group by DatePart("w",DateValue))
    As SUN,
    
    (SELECT  count(*) as Count
    FROM    mycte
    WHERE DatePart("w",DateValue) = 7
    group by DatePart("w",DateValue))
    As SAT,
    
    (SELECT  distinct SUM(COUNT(*)) OVER() AS Count
    FROM    mycte
    WHERE DatePart("w",DateValue) > 1 AND DatePart("w",DateValue) < 7
    group by DatePart("w",DateValue))
    As WK

returns blank/null 结果。我怎样才能 return 为 0?

这是您需要做的:

;WITH mycte AS (
    SELECT  GETDATE() DateValue
    UNION ALL
    SELECT DateValue + 1
    FROM mycte
    WHERE DateValue < EOMONTH(GETDATE())
)

select
   count(case when datepart(dw, DateValue) = 1 then 1 end) SUN
 , count(case when datepart(dw, DateValue) = 7 then 1 end) SAT
 , count(case when datepart(dw, DateValue) between 2 and 6 then 1 end) WK
from mycte

如果你想排除今天,你可以调整cte :

;WITH mycte AS (
    SELECT  GETDATE() + 1 DateValue
    WHERE GETDATE() <> EOMONTH(GETDATE())
    UNION ALL
    SELECT DateValue + 1
    FROM mycte
    WHERE DateValue < EOMONTH(GETDATE())
)

select
   count(case when datepart(dw, DateValue) = 1 then 1 end) SUN
 , count(case when datepart(dw, DateValue) = 7 then 1 end) SAT
 , count(case when datepart(dw, DateValue) between 2 and 6 then 1 end) WK
from mycte