2012-03-23 2 views
1

의 나는 다음과 같은 테이블이 있다고 가정 해 봅시다(SQL 서버)

TABLEA

seq datea 
1 2010-01-01 
2 2010-02-01 
3 2010-03-01 

TableB의

내가 원하는
dateb  sthvalue 
2010-01-11 AAA 
2010-01-12 AAB 
2010-02-03 CCC 
2010-02-06 CCD 
2010-02-10 CCE 
2010-03-05 FFF 

tableb.dateb에있는 두 테이블을 합치려면 daterange가 tablea

즉 출력은 당신의 친절한 도움을

seq datea  dateb  sthvalue 
1 2010-01-01 2010-01-11 AAA 
1 2010-01-01 2010-01-12 AAB 
2 2010-02-01 2010-02-03 CCC 
2 2010-02-01 2010-02-06 CCD 
2 2010-02-01 2010-02-10 CCE 
3 2010-03-01 2010-03-05 FFF 

많은 감사해야합니다!

+0

"범위"로 같은 달, 연도 등을 지정해야합니다. – JeffO

답변

1

가 테이블 A의 값은 항상 하나 떨어져 달의 1 일에 설정되어 가정 할 수 연도와 월에 가입하는 것입니다 생각 매달마다 기존 답변이 적용됩니다.

하면 더 다양한를 포함 할 수있는 테이블 A :

이 함께 두 개의 테이블을 조인, 나중에 현재 일치하는 것보다는 발생 TABLEA에서 "더 나은"가입 (행을 찾기 위해 시도
SELECT 
    * 
FROM 
    TableB b 
     inner join 
    TableA a 
     on 
      b.dateb >= a.datea 
     left join 
    TableA a_nolater 
     on 
      a_nolater.datea > a.datea and 
      b.dateb >= a_nolater.datea 
WHERE 
    a_nolater.seq is null 

, 여전히 tableb와 일치 할 것입니다). 이 "더 나은"조인을 찾을 수없는 행만 반환합니다. 따라서 tableB의 날짜와 그 이전 날짜 인 tableA의 최신 날짜 행을 찾습니다.

+0

답변 해 주셔서 감사합니다. 하지만 난 seq tableA에 테이블을 가입해야 다음 tableB, tableA 월별 문과 tableB 문을 트랜잭션입니다. 내가 어떻게해야하는지 알아볼거야. 도와 주셔서 다시 한번 감사드립니다 !! – AlphaAu

1

나는 당신을 위해 무엇을 요구하는 것은

select 
     seq,datea,dateb,sthvalue 
from 
     TableA inner join Tableb 
     on datepart(year,datea) = datepart(year,dateb) and 
     datepart(month,datea) = datepart(month,dateb) 
     order by seq,dateb 
+0

아, 날짜가 월간으로 보장되는 것은 아닙니다. 오해의 소지가있는 예를 게시했습니다. – AlphaAu

0

당신은

select 
    a.seq, 
    a.datea, 
    b.dateb, 
    b.sthvalue 
from 
    tablea a inner join tableb b on (b.dateb >= a.datea and b.dateb < dateadd(month, 1, a.datea)) 
order by 
    a.seq, b.sthvalue 
+0

아, 날짜가 월 단위로 보장되지는 않습니다. 오해의 소지가있는 예를 게시했습니다. – AlphaAu