프로젝트 별로 사전 작업시간과 계약 이후의 작업시간을 나누어서 보려고 하는데요.
아래와 같이 테이블이 구성이 되어져 있구요.
계약테이블의 계약일자를 기준으로 해서 계약이전은 사전, 계약이후는 사후... 그런데 계약이 안된 프로젝트는 사전만 나오도록...
하려면 어떻게 해야 할까요?
프로젝트 테이블 | ||
프로젝트 코드 | 프로젝트명 | |
A | A프로젝트 | |
B | B프로젝트 | |
C | C프로젝트 | |
작업시간 테이블 | ||
프로젝트코드 | 작업일 | 작업자 |
A | 2015-01-01 | a |
A | 2015-01-02 | a |
A | 2015-01-03 | a |
A | 2015-01-04 | a |
A | 2015-01-05 | a |
A | 2015-01-06 | a |
A | 2015-01-07 | a |
A | 2015-01-08 | a |
B | 2015-01-01 | b |
B | 2015-01-02 | b |
B | 2015-01-03 | b |
B | 2015-01-04 | b |
B | 2015-01-05 | b |
C | 2015-01-01 | b |
C | 2015-01-02 | b |
C | 2015-01-03 | b |
C | 2015-01-04 | b |
C | 2015-01-05 | b |
계약 테이블 | ||
계약코드 | 프로젝트코드 | 계약일 |
S-1 | A | 2015-01-04 |
S-2 | C | 2015-01-02 |
결과 값
프로젝트코드 | 작업일 | 작업자 | 계약일 | 단계 |
A | 2015-01-01 | a | 2015-01-04 | 사전 |
A | 2015-01-02 | a | 2015-01-04 | 사전 |
A | 2015-01-03 | a | 2015-01-04 | 사전 |
A | 2015-01-04 | a | 2015-01-04 | 사후 |
A | 2015-01-05 | a | 2015-01-04 | 사후 |
A | 2015-01-06 | a | 2015-01-04 | 사후 |
A | 2015-01-07 | a | 2015-01-04 | 사후 |
A | 2015-01-08 | a | 2015-01-04 | 사후 |
B | 2015-01-01 | b | 사전 | |
B | 2015-01-02 | b | 사전 | |
B | 2015-01-03 | b | 사전 | |
B | 2015-01-04 | b | 사전 | |
B | 2015-01-05 | b | 사전 | |
C | 2015-01-01 | b | 2015-01-02 | 사전 |
C | 2015-01-02 | b | 2015-01-02 | 사후 |
C | 2015-01-03 | b | 2015-01-02 | 사후 |
C | 2015-01-04 | b | 2015-01-02 | 사후 |
C | 2015-01-05 | b | 2015-01-02 | 사후 |
Comment 2
-
항해자™
2016.02.16 08:37
-
Terry
2016.02.16 19:38
;with 프로젝트(코드,프로젝트명) As
(
Select 'A','A프로젝트' Union All
Select 'B','B프로젝트' Union All
Select 'C','C프로젝트'
)
,작업시간(프로젝트코드,작업일,작업자) As
(
Select 'A','2015-01-01','a' Union All
Select 'A','2015-01-02','a' Union All
Select 'A','2015-01-03','a' Union All
Select 'A','2015-01-04','a' Union All
Select 'A','2015-01-05','a' Union All
Select 'A','2015-01-06','a' Union All
Select 'A','2015-01-07','a' Union All
Select 'A','2015-01-08','a' Union All
Select 'B','2015-01-01','b' Union All
Select 'B','2015-01-02','b' Union All
Select 'B','2015-01-03','b' Union All
Select 'B','2015-01-04','b' Union All
Select 'B','2015-01-05','b' Union All
Select 'C','2015-01-01','b' Union All
Select 'C','2015-01-02','b' Union All
Select 'C','2015-01-03','b' Union All
Select 'C','2015-01-04','b' Union All
Select 'C','2015-01-05','b'
)
,계약(계약코드,프로젝트코드,계약일) As
(
Select 'S-1','A','2015-01-04' Union All
Select 'S-2','C','2015-01-02'
)
Select
a.코드
,b.작업일
,b.작업자
,IsNull(c.계약일,'') As 계약일
,(
Case When b.작업일 < IsNull(c.계약일,'9999-12-31') Then '사전'
Else '사후'
End
)
As 단계
From 프로젝트 a
Inner Join 작업시간 b On a.코드 = b.프로젝트코드
Left Outer Join 계약 c On a.코드 = c.프로젝트코드
Order By a.코드 Asc
,b.작업일 Asc
case
when a.cContract < b.cContract then N'사후'
else N'사전
end
from dbo.tCodeMaster as a
left join dbo.tWorkLog as b
on b.cProjectCode = a.cProjectCode