안녕하세요! 좀 복잡한 내용입니다. 도와주세요!
문의형식은 다르지만 결과값이 똑같이 나와야 되는데 같지않습니다.
제가 보기엔 sql문장에 문제가 있는것 같은데 도대체 찾을 수가 없네요!
고수님들의 답변을 기다립니다. 꼭 고수님이 아니더라도 아시는 분은 답변 꼭 부탁드립니다.
아래는 그룹별 판매현황을 나타내기위한 sql문입니다.
select viewgroupsale.grouptype, amount=isnull(sum(amount),0), totalmoney=isnull(sum(totalmoney),0), returnamount=isnull(sum(returnamount),0), returnmoney=isnull(sum(returnmoney),0),
benefit=isnull(sum(totalmoney),0)-isnull(sum(returnmoney),0)
from viewgroupsale, viewgroupreturn
where viewgroupsale.grouptype*=viewgroupreturn.grouptype
and orderdate *= returndate
and orderdate >= "seadate1.Text" and orderdate <= "seadate2.Text "
group by viewgroupsale.grouptype
* seadate1.text - 검색할 시작날짜 입력박스
* seadate2.text - 검색할 마지막날짜 입력박스
다음은 업체별 제품집계표의 sql문장입니다.
SELECT viewcomgoodsale.grouptype, viewcomgoodsale.companyname, viewcomgoodsale.goodcode, AMOUNT=isnull(SUM(AMOUNT),0),
TOTALMONEY=isnull(SUM(TOTALMONEY),0), RETURNAMOUNT=ISNULL(SUM(RETURNAMOUNT),0), RETURNMONEY=ISNULL(SUM(RETURNMONEY),0),
BENEFIT=isnull(SUM(TOTALMONEY),0)-ISNULL(SUM(RETURNMONEY),0)
FROM VIEWCOMGOODSALE, VIEWCOMGOODRETURN
where ORDERDATE*=RETURNDATE
AND viewcomgoodsale.grouptype*=viewcomgoodreturn.grouptype
and VIEWCOMGOODSALE.COMPANYNAME*=VIEWCOMGOODRETURN.COMPANYNAME
AND VIEWCOMGOODSALE.GOODCODE*=VIEWCOMGOODRETURN.GOODCODE
and orderdate >= "seaorderdate1.Text" and orderdate <= "seaorderdate2.Text"
and viewcomgoodsale.grouptype = "seagrouptype.Text"
GROUP BY viewcomgoodsale.grouptype, viewcomgoodsale.companyname, VIEWCOMGOODSALE.GOODCODE order by viewcomgoodsale.grouptype, viewcomgoodsale.companyname, VIEWCOMGOODSALE.GOODCODE
* seaorderdate1.text - 검색할 시작날짜 입력박스
* seaorderdate2.text - 검색할 마지막날짜 입력박스
* seagrouptype.Text - 검색할 그룹유형 입력박스
그룹별 판매현황은 일정기간을 조건으로 주고 그룹유형,수량,합계금액,반품수량,반품금액,총합계금액을 나타내구요 업체별 제품집계표에서 일정기간과 그룹유형을 조건으로 주고 그룹유형,업체명,수량,합계금액,반품수량,반품금액,총합계금액으로 나타내려고 합니다.
예를들어 그룹별 판매현황에서 날짜를 "20000901"에서 "20000930까지 조건을 주면
그룹유형별로 조건을 준 날짜별로 합계해서 출력되구요 업체별 제품집계표에서는
날짜를 "20000901"에서 "20000930까지 조건을 주고 그룹유형을 조건으로 주면 각 업체별에 따른 날짜별로 출력됩니다.
그룹유형 - 대리점,취급점,할인점,통신판매,백화점,기타
그룹유형별 업체명 - 예) 강남대리점 - 대리점, 한국벽창호 - 취급점,
삼성홈플러스 - 할인점, 국민카드 - 통신판매
신세계백화점 - 백화점, 사은품,소매 - 기타
(모든 업체는 그룹유형에 속해있음)
그룹별 판매현황 검색내용
select viewgroupsale.grouptype, amount=isnull(sum(amount),0), totalmoney=isnull(sum(totalmoney),0),
returnamount=isnull(sum(returnamount),0), returnmoney=isnull(sumreturnmoney),0),
benefit=isnull(sum(totalmoney),0)-isnull(sum(returnmoney),0)
from viewgroupsale, viewgroupreturn
where viewgroupsale.grouptype*=viewgroupreturn.grouptype
and orderdate *= returndate
and orderdate >= "20000901" and orderdate <= "20000930"
group by viewgroupsale.grouptype
<결과>
grouptype amount totalmoney returnamount returnmoney benefit
---------- ------ --- ------- ------------- ---------- ---------------------
기타 166 1445474 0 .0000 1445474
대리점 14209 237984046 8546 171566426 66417620
백화점 81 2537495 0 .0000 2537495
취급점 759 18703985 0 .0000 18703985
통신판매 3581 34896073 105 4498263 130397810
할인점 11585 292034327 146 3642690 288391637
(6 row(s) affected)
Warning: Null value eliminated from aggregate.
업체별 제품집계 검색내용
SELECT viewcomgoodsale.grouptype, viewcomgoodsale.companyname, viewcomgoodsale.goodcode, AMOUNT=isnull(SUM(AMOUNT),0),
TOTALMONEY=isnull(SUM(TOTALMONEY),0), RETURNAMOUNT=ISNULL(SUM(RETURNAMOUNT),0), RETURNMONEY=ISNULL(SUM(RETURNMONEY),0),
BENEFIT=isnull(SUM(TOTALMONEY),0)-ISNULL(SUM(RETURNMONEY),0)
FROM VIEWCOMGOODSALE, VIEWCOMGOODRETURN
where ORDERDATE*=RETURNDATE AND viewcomgoodsale.grouptype*=viewcomgoodreturn.grouptype
and VIEWCOMGOODSALE.COMPANYNAME*=VIEWCOMGOODRETURN.COMPANYNAME
AND VIEWCOMGOODSALE.GOODCODE*=VIEWCOMGOODRETURN.GOODCODE
and orderdate >= "20000901" and orderdate <= "20000930"
and viewcomgoodsale.grouptype = "대리점"
GROUP BY viewcomgoodsale.grouptype, viewcomgoodsale.companyname, VIEWCOMGOODSALE.GOODCODE order by viewcomgoodsale.grouptype, viewcomgoodsale.companyname, VIEWCOMGOODSALE.GOODCODE
<결과>
grouptype companyname goodcode AMOUNT TOTALMONEY RETURNAMOUNT RETURNMONEY BENEFIT
--------- ----------- --------- ------- ---------- ------------ ------------ --------
대리점 강남대리점 넥타이걸이 150 150 0 .0000 150
대리점 강남대리점 바구니85 20 90900 0 .0000 90900
대리점 강남대리점 선반 418 3316412 180 1472760 1843652
대리점 강남대리점 신형선반 65 691340 70 744520 -53180
대리점 강남대리점 옷카바대 65 886340 0 .0000 886340
.
.
.
위의 결과의 그룹별 판매현황의 대리점별 RETURNAMOUNT와 RETURNMONEY의 값과
업체별 제품집계의 RETURNAMOUNT의 모두 더한 총합계값과 RETURNMONEY를 모두 더한
합계값이 같아야 됩니다. 그런데 그룹별 제품집계에서 그룹유형이 대리점과 할인점의 RETURNAMOUNT와 RETURNMONEY의 값이 다르게 출력이 됩니다. 뷰를 참조하기 때문에
실제 뷰의 내용을 보면은 그룹별 판매현황의 값과 같습니다. 결국 업체별 제품집계
의 출력된 내용이 잘못되었다고 할 수 있습니다. 업체별 제품집계가 참조하는 뷰의 실제 내용을 보면은 출력된 내용가 다르니까요.
제가 생각하기면 업체별 제품집계를 나타내는 SQL문장이 잘못되어 있지 않나 하는생각입니다. 근데 제가 보기엔 잘못된 부분이 도저히 보이지 않네요!
몇일 째 이 문제 때문에 잠도 못 자고 있습니다. 회사의 매출액을 나타내는 부분이기 때문에 결과값이 맞이 않으면 큰 문제가 되기 때문에 해결되지 않으면 제 목이 위험합니다. 도움을 기다리겠습니다. 그럼 수고하세여~~~