2017-12-18 11 views
0

나는 다음과 같은 형식으로 구조화 된 데이터를 가지고 :범위의 열 방향 사이에 날짜를 표시하는 방법

+------------+-----------+-----------+ 
| Case_Number|Start_Date |End_Date | 
+------------+-----------+-----------+ 
|A1   | 12/1/2017 | 12/15/2017| 
|A2   | 12/12/2017| 12/28/2017| 

내가 내림됩니다 두 번째 테이블의 값을 사용하여 칼럼 값으로 시작 및 종료 데이터를 변환하는 기대했다 그 주초에 가치. 예를 들어 12/1/2017은 월요일에 해당하는 11/27/2017으로 반올림됩니다. 이 변환을하는, 나는 다음과 같은 형식으로 데이터를 얻을 기대했다 : 나는 경우가 활성화되었다는 매주의 첫 번째 월요일을 표시 바라고

+----------------+-----------+ 
| Week Start Date|Case Number| 
+----------------+-----------+ 
|11/27/2017  | A1  | 
|12/4/2017  | A1  | 
|12/11/2017  | A2  | 
|12/18/2017  | A2  | 

. 특정 주에 사례가 종료 된 경우 생성 된 두 번째 테이블에 그 주를 표시하고 싶지 않습니다.

+0

두 번째 테이블에서 첫 번째 행부터 어떻게 시작하는지 자세히 설명하십시오. 나는 당신의 변형이 어떻게 작용하는지 전혀 모른다. 어디'14/4/2017 | A1'에서 왔어? –

+0

이 날짜는 해당주의 월요일의 반올림 날짜입니다. 나는 모든 월요일의 날짜를 포함하는 도우미 테이블을 만들었습니다. 따라서 해당 주에 사례가 종료되지 않는 한 두 번째 테이블에 해당 주 월요일 날짜가 표시됩니다. – Raptor776

+0

두 개의 분리 된 질문이있는 것 같습니다. 하나는 날짜를 변환하고 다른 하나는'UNPIVOT' 테이블을 변환합니다. 다른 주제가 있기 때문에 하나의 질문에만 forcus를 권 해드립니다. –

답변

1

매주 월요일에서 시작하여 도우미 테이블 또한 날짜 및 7 일간 다른 열이 있다면 그것은 좋은 것입니다,하지만 경우이 작동합니다 :

select datatable.case_number, helper.week_date 
from helper 
left join datatable on datatable.end_date >= helper.week_start 
    and datatable.start_date < dateadd('d',7,helper.week_start) 

참고이의 논리에서 온다 "앞으로 다시"보일 수 날짜

W1  w2 
s-E |  |  ignore 
s--|--------|-E 
    s-|---E |  
    s----E |  
    | s---E |  
    | s----E 
    |  s--|-E 
    |  | s-E ignore 
     s < w2 
     E >= W1 

그 "이미지"의 처음과 마지막 행의 관계는 기간 W1 to w2 어떤 개입이없는, 그래서 그들은 무시하세요. 다른 모든 행에는 W1 to w2 기간에 일부 관여가 있으므로 모든 조건을 충족 시키되 다른 조건은 충족시키지 않습니다. 우리가 원하는 모든 위치 s< w2이고 원하는 모든 위치 E> W1입니다. 그러나 모든 행에 대해 무시하고 싶은 행은 사실이 아닙니다. 따라서 우리가 원하는 모든 행에 대해 : s < w2 and E > W1

+0

고맙습니다. 내일 아침에 시도하고 업데이트 해 드리겠습니다! – Raptor776

+0

작동합니다. 감사합니다! – Raptor776