我想建立一个CTE给我的开始日期和GETDATE()
即星期一,星期二,星期三的数量之间的天日历日历等SQL使用CTE和枢轴,使月
我有有需要之前日历计数得到满足,如果是1 2或3将使用日期添加天数增加它能够完成
我的有效起始日期条件和应该做这样的case语句一直持续到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
任何帮助将是伟大的,因为我明白这是相当复杂
你为什么不建立一个CTE压延榜第一,并使用该表中更加复杂的部分。我没有完全学习你的语法,但看起来你正在做CTE第一部分的所有事情,然后在第二部分中选择所有的东西。这使得它成为一个复杂的联盟,并重复相同的联合。如果你在第二部分进行加入,你只需要做一次。 – Wietze314
感谢您的提示,我将现在尝试, – user2040295
谢谢Wietze我根据您的评论创建了一个完全不同的查询应该给我相同的结果,但是我现在卡在枢轴上,所以如果你能帮助我们与这将不胜感激。 – user2040295