1

我正在尝试构建一个 CTE 来给我一个开始日期之间天数的日历,GETDATE()即星期一、星期二、星期三等的数量。

我有一个 case 语句,其中包含在日历计数完成之前需要满足的条件

如果是 1 2 或 3,我的有效开始日期将使用 Date-Add 将天数添加到它,并且应该连续执行此操作直到GETDATE().

我知道我需要使用枢轴,但似乎很难让枢轴与 CTE 一起工作,

WITH CTE 
AS (
  select MR.ContractId B2,Name A1, EffectiveStartDate A ,swd2.Id B
  FROM [VES.DES].dbo.MasterRound mr LEFT JOIN [VES.DES].dbo.ScheduledWeekDay swd2
                ON MR.RoundRecurrenceId = SWd2.Id

  UNION ALL

  SELECT 
            B2,A1,
            CASE    
            When B = 2 Then DATEADD(D,+7,A) 
            When B = 1 Then DATEADD(D,+1,A)
            When B = 3 Then DATEADD(D,+14,A) END AS A, B

  FROM CTE WHERE A < GETDATE())

SELECT * FROM CTE
WHERE CTE.B2 = '12' 
AND DATEPART(m, A) = DATEPART(m, DATEADD(m, -1, getdate()))
option (maxrecursion 0)

我最终想要的输出是

NAME(A1), Month, MON, Tues, WED, Thu, Fri, Sat, Sun   
---------------------------------------------------    
FW1        JAN    4     3      4    5    3   4    2
FW3        FEB    4     5      4    4    4   4    5

任何帮助都会很棒,因为我很欣赏这很复杂

4

1 回答 1

1

我认为使用 CTE 组合不使用 PIVOT 会更容易。

使用 GROUP BY 之类的

SELECT
A1,
SUM(
CASE WHEN DATEPART(DW, A) = 1 THEN 1 ELSE 0 END
) AS Sunday
,
SUM(
CASE WHEN DATEPART(DW, A) = 2 THEN 1 ELSE 0 END
) AS Monday

FROM CTE

WHERE CTE.B2 = '12' 
AND DATEPART(m, A) = DATEPART(m, DATEADD(m, -1, getdate()))
option (maxrecursion 0)

GROUP BY A1
于 2013-09-24T08:16:03.490 回答