CI 묻고 답하기

제목 아 고민끝에 포럼에 쿼리질문좀 올릴게요.ㅜ!!
글쓴이 토리 작성시각 2010/12/16 12:24:24
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 22302   RSS
우선 CI포럼에 CI와 상관없는 질문을 올려서 죄송합니다.ㅜ

긴 쿼리중에 이부분이 문제인 부분만 때왔습니다.ㅜ

SELECT group_type, count(*) as quantity_basic, 0 as quantity_stretched
    FROM
    (
SELECT TOP (500) *  FROM
    (
      SELECT  i.group_type,h.start_t
      FROM tbl_serial_history h, tbl_selling s, tbl_incentive i
      WHERE h.sell_no=s.sell_no AND s.model_num = i.model_num
      AND h.start_t >= '2010-01-01' AND h.sell_state='Y' AND s.sell_type='ST'
      AND h.start_t < '2010-12-31'
      AND s.buyer_no IN(select user_no from tbl_user where mod_no=81)
      AND (s.seller_no = i.dist_no1 or s.seller_no = i.dist_no2)
    
    )x order by start_t
   ) a
   group by a.group_type

설명:
 - 1월부터 12월까지 거래내역을 저 top의 갯수만큼 불러 오는겁니다. 여기에는 500이라고 쓰여있죠..
거래내역은 만약 A제품이 10개가 1월1일에 거래가 됐으면

거래번호 |제품명| 시리얼번호 | 거래일 | 타입
     1             A             a0001        01-01     ST
     1             A             a0002        01-01     ST
     1             A             a0003        01-01     ST <-- 판매
     ..                ....                     ...           ..         ...
--------------------------------------------------    
     3             A              c0001       01-02    RN <-- 반품
------------------------------------------------------
 이런식으로 이렇게 하나의 거래번호에 각각다른 시리얼 번호가 10개가 등록되면 1월 1일에
어떤 제품이 10개가 거래된것입니다.

이렇게 해서 1월부터 12월까지 거래된거중에 500개를 불러오는겁니다.

자 이제 문제는...ㅜ

문제점 :

이제 500개의 거래내역이 불러와 지는데...ㅜ

저기 빨간색 표시의 sell_type="ST" 이거 판매한것이거든요.
그리고 sell_type="RN" 이게 반품했다는 것인데..

위에보시면 ST한거만 뽑아 내잖아요.

이게 반품을 뺀 값이 나와야 하는데 아..이게 어떤식으로 해야할지...

이게 1월부터 순차적으로 거래내역을 뽑는건데..

만약 top(500)까지 반품없이 ST만 했다면 문제될게 없는데..

만약 1월13일까지 ST한게 500개인데 1월4일날 반품한 카운트가 10개가 있다면..
이 10개를 빼고 1월 14일날 ST 10개의 카운트가 나와야 하는 이런 상황인것입니다.!

 아 이게 글로 표현할려니 설명을 잘 못하겠네요..ㅜ

엉엉..저의 미천한 실력이 점점 바닥을 드러내고 있는 현실이 슬픕니다.ㅜ

태그 tsql,query,mssql,top
 다음글 다음오픈에티터에서 편집기 부분만 공통으로 뺄려고 하는데... (2)
 이전글 telnet 관련 문의입니다.^^; (1)

댓글

변종원(웅파) / 2010/12/16 20:37:54 / 추천 0
13일 반품이 있다면 14일자에 그 반품수만큼 잡혀야한다는 말인가요? 어떤 로직인지 파악하기가 힘들어서.. ^^
토리 / 2010/12/17 10:19:08 / 추천 0

//웅파님
아무래도 그렇죠? 설명이 부족해서 이게..ㅜㅜ
http://www.sqler.com/329567  <-- 여기도에도 질문을 올렸거든요.ㅜ 로직을 파악하시는데..
조금 도움이 되실수도..ㅜ ㅋ ㅎ 관심보여주셔서 대단히 감사합니다. 이따 저녁때 뵙겠습니다.ㅋ

변종원(웅파) / 2010/12/17 12:48:51 / 추천 0
토리/ sqler.com 사이트 좋네요.. ^^
이따 뵐께요.
mycastor / 2010/12/21 13:40:58 / 추천 0
정모때 이야기 했던 것이 이거였군요 ㅋㅋ

기간내 목록에서 NOT IN 을 이용하여 RN인 것들의 갯수를 뺀것에서 500개를 가져오면 되지 않을까요?

라인 한줄로 쿼리를 작성하는 것도 좋지만 저렇게 해두면 코드 가독성도 떨어지고 하니까

저 같으면 메모리에 SELECT 결과를 임시테이블로 저장해서 결과값을 구한다음에

임시테이블을 날려버리는 식으로 할꺼 같네요.