1

CTE を構築して、開始日とGETDATE()月曜日、火曜日、水曜日などの間の日数のカレンダーを作成しようとしています。

カレンダーのカウントが完了する前に満たす必要がある条件を含むケース ステートメントがあります。

有効開始日が 1 2 または 3 の場合、Date-Add を使用して日数を追加し、これを まで継続して行う必要がありますGETDATE()

ピボットを使用する必要があることはわかっていますが、PIVOT を 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

PIVOT を使用しない方が CTE コンボの方が簡単だと思います。

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 に答える