제목 | 아 고민끝에 포럼에 쿼리질문좀 올릴게요.ㅜ!! | ||
---|---|---|---|
글쓴이 | 토리 | 작성시각 | 2010/12/16 12:24:24 |
|
|||
우선 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
//웅파님 |
변종원(웅파)
/
2010/12/17 12:48:51 /
추천
0
토리/ sqler.com 사이트 좋네요.. ^^
이따 뵐께요. |
mycastor
/
2010/12/21 13:40:58 /
추천
0
정모때 이야기 했던 것이 이거였군요 ㅋㅋ
기간내 목록에서 NOT IN 을 이용하여 RN인 것들의 갯수를 뺀것에서 500개를 가져오면 되지 않을까요? 라인 한줄로 쿼리를 작성하는 것도 좋지만 저렇게 해두면 코드 가독성도 떨어지고 하니까 저 같으면 메모리에 SELECT 결과를 임시테이블로 저장해서 결과값을 구한다음에 임시테이블을 날려버리는 식으로 할꺼 같네요. |