2016-11-15 6 views
0

입니다. 테이블 EmployeeProjectempid, startdate, enddate의 세 열이 있습니다.동일한 ID를 가지며 시작일과 종료일이 서로 다른 직원의 월간 날짜 차이는

같은 empid이고 다른 startdateenddate 인 달 두 날짜 사이의 일 수를 가져 오려고합니다.

Empid | Startdate | Enddate | 
----------------------------- 
1  | 20160115 | 20160330 | 
1  | 20160101 | 20161231 | 
2  | 20161001 | 20161031 | 
2  | 20161215 | 20170131 | 

나는 출력은 다음과 같이 할 것을 권장합니다

Empid | StartDate | Enddate | Monthname | Days | 
------------------------------------------------ 
1  | 20160115 | 20160330 | Jan  | 15 | 
1  | 20160115 | 20160330 | Feb  | 29 | 
1  | 20160115 | 20160325 | Mar  | 25 | 
1  | 20160101 | 20161229 | Jan  | 31 | 
1  | 20160101 | 20161231 | Feb  | 29 | 
2  | 20161001 | 20161031 | Oct  | 31 | 
2  | 20161215 | 20170131 | Dec  | 15 | 
2  | 20161215 | 20170131 | Jan  | 31 | 
+0

가, 내 말은 월 이름을 표시하기위한 논리 란 (을 MyTable 변경) 필요한 경우
이를 확인하고 참조 ....? 명확히하십시오. – balaji

+0

질문이 명확하지 않습니다. 가져 오기 조건은 무엇입니까? 예상 결과가 무엇인지 명확하게 대답하십시오. – Mansoor

+0

링크 : http : //dba.stackexchange.com/questions/125069/find-the-days-difference-between-two-dates -달마다. 친절하게 link.I 위의 링크로 출력을 원하지만 동일한 employeeno 및 다른 startdate 및 enddate 위의 예제로 metioned있다. – ABC

답변

1

나는 당신이 당신의 예에 오류가 있다고 가정합니다. 즉 당신이 특정 행 일월 또는 2월 또는 기타에 해당 말할 않는 경우

with  cte (Empid,Startdate,Enddate,month_offset,n) as 
      (
       select  t.Empid,t.Startdate,t.Enddate,datediff(month,t.Startdate,t.Enddate),1 
       from  MyTable 

       union all 

       select  Empid,Startdate,Enddate,month_offset-1,n+1 
       from  cte 
       where  month_offset > 0 
      ) 

select  Empid,Startdate,Enddate 
      ,left(datename(month,dateadd(month,month_offset,Startdate)),3) as Monthname 

      ,datediff 
      (
       day 
       ,case month_offset when 0 then Startdate else dateadd(month,datediff(month,0,Startdate)+month_offset,0) end 
       ,case n when 1 then Enddate else dateadd(month,datediff(month,0,Startdate)+month_offset+1,0) end 
      ) as days 



from  cte 

order by Empid,Startdate,Enddate 
      ,case month_offset when 0 then Startdate else dateadd(month,datediff(month,0,Startdate)+month_offset,0) end 
+0

정말 고마워요! 코드가 작동했습니다! :) – ABC