고객에 대한 매출과 입금금액의 총합계를 구하려고 합니다.
우선 테이블은 세개가 있습니다.
첫번째는 고객테이블이고,(고객코드,성명,전화번호...)
두번째는 매출테이블(매출번호,고객코드,매출금액)
세번째는 입금테이블입니다.(입금번호,고객코드,입금액) <---- 여기에는 자료가 없을수도
있다.
출력
고객코드,성명,전화번호,총매출금액,총입금금액,총미수금 <--총미수금:총매출금액-총입금금액
groupby를 쓰고
sum(total) as 총매출금액,sum(ibtot) as 총입금금액,(총매출금액 - 총입금금액) as 총미수금
이런식으로 select문을 썼는데... 문제는 입금테이블에 그 해당고객에 대한 자료가 없을경우에는 총입금금액도 안 나오고 또한 총미수금도 계산이 되지 않습니다. 총매출금액이 값이 있더라도 총입금금액값이 null이다보니 이럴경우에는 어떻게 해야 하는지요...
SELECT
A.고객코드 ,
A.성명 ,
A.전화번호 ,
SUM(B.매출금액),
SUM(C.입금액),
NVL(SUM(B.매출금액),0) - NVL(SUM(C.입금액),0) => ORACLE
ISNULL(SUM(B.매출금액),0) - ISNULL(SUM(C.입금액),0)
=> SYBASE,MSSQL
FROM 고객테이블 A,
매출테이블 B,
입금테이블 C
WHERE A.고객코드 = B.고객코드(+) => ORACLE
AND A.고객코드 = C.고객코드(+)
WHERE A.고객코드 *= B.고객코드 => SYBASE, MSSQL
AND A.고객코드 *= C.고객코드
GROUP BY
A.고객코드 ,
A.성명 ,
A.전화번호
==> 이런경우는 고객만 있으면 매출이 없어도, 입금이 없어도 나옵니다...
참고로 NULL은 모든계산에서 제외(숫자계산, 문자비교)됩니다...
조건을 걸어도 비교대상에서는 제외되죠...
이때는 NVL(ORCLE)이나 ISNULL(SYBASE,MSSQL)을 사용해서 비교를 하죠...
도움이 되셨으면...합니다...
Email : smake@unitel.co.kr