2014-07-26 1 views
0

안녕하세요 친구 나는 SQL 서버에서 작은 의심을 가지고 여기에 조건에 따라 데이터를 원합니다. 동일한 ID와 상태가 같은 경우 해당 날짜 값은 입니다. EMPfdate 및 tdate 범위에서 날짜 레코드를 확인하는 방법

id |status  |date(mm-dd-yy) |fdate(mm-dd-yy) |tdate(mm-dd-yy) 
1 | S   |03-16-11  |     | 
1 | b   |    | 03-15-11  |03-18-11 
1 | s   |03-17-11  |     | 
1 | b   |    | 04-20-12  |04-30-12 
1 | S   |04-20-12  |     | 
1 | s   |04-10-12  |     | 
1 | s   |10-01-14  |     | 
1 | b   |    |10-02-14   |10-25-14 
2 | s   |01-18-12  |     | 
2 | b   |    |01-18-12   |01-28-12 
2 | b   |    |03-10-13   |03-24-13 
2 | s   |03-16-13  |     | 
2 | s   |03-10-13  |     | 
2 | s   |03-23-13  |     | 
2 | b   |    |04-20-13   |04-27-13 
2 | s   |07-01-14  |     | 

테이블 (상태 = s의 ID, 일자) 상태 = B, 동일한 ID 번호와 날짜 (상태 (S)에서 날짜 값)과 비교 : 표

SQL 서버에 쿼리를 작성하여 날짜 범위는 fdate와 tdate입니다. 범위에서 다음

id |status  |date(mm-dd-yy) |fdate(mm-dd-yy) |tdate(mm-dd-yy) |Billing 
1 | S   |03-16-11  |     |     |yes 
1 | s   |03-17-11  |     |     |yes 
1 | S   |04-20-12  |     |     |yes 
1 | s   |04-10-12  |     |     |no 
1 | s   |10-01-14  |     |     |no 
2 | s   |01-18-12  |     |     |yes 
2 | s   |03-16-13  |     |     |yes 
2 | s   |03-10-13  |     |     |yes 
2 | s   |03-23-13  |     |     |yes 
2 | s   |07-01-14  |     |     |no 

같은 다른 현명한 결제 예 아니오

출력을 청구하지와 데이터 i가 그 exactely 결과를주지

select * 
from (select * from emp a where status ='s') a 
inner join (select * from emp b where status='b') b 
    on a.pn=b.pn 
where a.date<=b.date1 and a.date>=b.date2 

아래와 같이 질의하려고하는 경우. SQL 서버에서 쿼리를 작성하는 방법을 알려주십시오.

답변

0

select a.Id, 
     a.status, 
     a.date, 
     a.fdate, 
     a.tdate, 
     max(IsNull(case when a.date between b.fDate and b.tDate 
     then 'yes' 
     else 'no' 
     end, 'no')) Billing 
from emp a 
left join emp b 
    on a.Id=b.Id 
where a.status ='s' 
    and b.status = 'b' 
group by a.Id, 
     a.status, 
     a.date, 
     a.fdate, 
     a.tdate 

몇 가지 질문/의견을 시도해보십시오 pn, date1date2 :

  • 분야는 무엇입니까?
  • 검색어에서 date1이 (가) date2보다 클 것 같습니다.
관련 문제