쿼리 질문드립니다. 0 5 1,088

by kshap [SQLServer] [2015.01.27 17:56:11]


select a.Nm as 거래처명

, a.Ceo as 대표자명

, a.Tel as 대표전화

, a.Hp as 핸드폰

, a.Addr as 주소

, a.Code

, b.lastcall as 마지막전화날짜

from table1 a

inner join (

select b.code

, b.lastcall

, row_number() over (partition by b.code order by b.lastcall desc) as rnum

from table2 b

where (b.lastcall between '2014-01-01' and '2015-02-26')

) b on a.code = b.code

where rnum = 1

 

'table2' 테이블에는 거래처에 전화했을 경우 당일 날짜로 데이터가 추가됩니다.

쿼리 결과는 특정기간에 거래처에 전화를 했을 경우 마지막으로 전화한 날짜와

거래처 정보를 표시합니다.

그래서 윈도우 함수를 써서 최종날짜를 뽑아냈었습니다.

 

그런데 반대 상황일 경우 어떻게 해야 하나요?

 

예를 들어 특정기간에 전화를 하지 않은 거래처에 대해 표시하고

그 거래처에 마지막으로 전화한 날짜를 표시한다고 했을 때

between을 not between으로 고쳐보았습니다만,

한가지 문제가 있었습니다. 'table2'에 마지막으로전화한 날짜가 입력이 안된채로

데이터가 들어가는 경우도 있어서 날짜가 비어있는 경우도 있습니다.

 

그래서 만일 '가나'라는 거래처에 2015-01-01에 전화한 데이터가 있고

날짜가 빈 데이터가 있다고 할때 2014-01-01~2015-01-30 사이에 전화를 안한 데이터를 뽑는다고 하면 '가나'라는 데이터는 특정기간에 전화를 했었기 때문에 결과에 나오면 안됩니다.

 

그런데 날짜가 빈 데이터가 있는 경우가 있어 결과에 나오게 되더라구요.....

말이 너무 길고 복잡한 상황이라 전달이 잘되었는지 모르겠습니다....

 

혹시 전달되었다면 그런 경우에는 어떤 방법을 써야하나요.......?

by jkson [2015.01.27 18:04:23]

퇴근 시간이라.. 길게 답변은 못 드리고

 

http://www.gurubee.net/article/64292#comment_122573

 

이 질문과 거의 유사한 내용이군요.

 

not exists로 해결하세요.


by kshap [2015.01.27 18:14:17]

not exists를 어느 부분에 추가 해야할까요.....

제가 초보여서....ㅠㅠ


by lovekod2hj [2015.01.27 18:04:51]

NOT EXISTS 조건 추가하면 될거 같은데요.
 


by 마농 [2015.01.27 18:22:35]
SELECT a.Nm   AS 거래처명
     , a.Ceo  AS 대표자명
     , a.Tel  AS 대표전화
     , a.Hp   AS 핸드폰
     , a.Addr AS 주소
     , ISNULL(b.lastcall2, b.lastcall) AS 마지막전화날짜
     , a.Code
     , b.lastcall
     , b.lastcall2
  FROM table1 a
  LEFT OUTER JOIN
       (SELECT code
             , MAX(lastcall) lastcall
             , MAX(CASE WHEN lastcall BETWEEN '2014-01-01' AND '2015-02-26'
                        THEN lastcall END) lastcall2
          FROM table2
         GROUP BY code
        ) b
    ON a.code = b.code
-- WHERE b.lastcall2 IS NOT NULL -- 특정기간에 전화를 했을 경우
 WHERE b.lastcall2 IS NULL     -- 특정기간에 전화를 안한 경우
;

 


by kshap [2015.01.28 15:01:54]

원했던 결과가 나오네요ㅠㅠ

감사합니다!!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입