2013-09-23 1 views
0

내가 나에게 월요일, 화요일, 수요일의 수, 즉 시작 날짜와 GETDATE() 사이의 일의 일정을 제공하기 위해 CTE 구축을 위해 노력하고의 캘린더를 만들SQL 사용 CTE 및 PIVOT 등, 달

캘린더 카운트가 완료되기 전에 충족되어야하는 조건이있는 케이스 성명서를 가지고 있습니다.

유효한 시작 날짜가 1 2 또는 3 인 경우 날짜 - 추가를 사용하여 일수를 더하고이를 수행해야합니다. 계속 GETDATE()까지 내가 피벗을 사용할 필요하지만 CTE와 함께 작동하도록 PIVOT을 받고 문제가 많이있을 것 같다 알고

,

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 
입니다

어떤 도움을 주시면 감사하겠습니다. 매우 복잡합니다.

+1

. 나는 구문을 완전히 연구하지는 않았지만 CTE의 첫 번째 부분에서 모든 것을하고 두 번째 부분에서 모든 것을 선택하는 것 같습니다. 같은 결합을 반복하면서 복잡한 결합을 만듭니다. 두 번째 부분에서 조인을 수행하면 한 번만 수행하면됩니다. – Wietze314

+0

팁을 주셔서 감사합니다 지금은 그 시도, – user2040295

+0

고마워 Wietze 내가 당신의 의견을 기반으로 나에게 동일한 결과를 제공해야 완전히 다른 쿼리를 만들었지 만, 지금은 피벗에 갇혀 그래서 당신이 우리를 도울 수 있다면 대단히 감사하겠습니다. – user2040295

답변

1

CTE 콤보가 PIVOT을 사용하지 않는 것이 더 쉽다고 생각합니다.

사용 등에 의해 GROUP 당신이 먼저 CTE 캘린더 테이블을 생성하고, 더 복잡한 부분에 해당 테이블을 사용하지 않는 이유는

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 
+0

안녕하세요. 전 이해할 수 없다고 생각합니다. 내 사례 명세서와 날짜 추가 기능에 대해 어떻게해야합니까? 내가 날짜 이름으로 날짜를 변환하기 전에 거기에 그 사람이 필요해, 내가 날짜와 함께 날짜 이름을 사용하는 순간 나는 문자열을 변환 날짜 또는 시간을 추가 할 수 있습니다. 미리 감사드립니다 – user2040295

+0

나는 내 대답 구문을 바 꾸었습니다. 필터는 계속 사용할 수 있습니다. 아직 해결책이 아니라면 해결책에 무엇이 잘못된지 알려주십시오. – Wietze314

+0

안녕 Wietze 지금은 일을하고있어 구문을 가지고 일을 끝내기 위해 약간의 도움과 수정을 가하면 작동하도록했습니다. 감사합니다. – user2040295