이 쿼리를 아웃조인과 디코드를 이용해야 한다고 하셨는데요..
조건절에서 vip 회원만 빼면 되는거 아닌가요?
보통 select * from part where cust_id in (select custno from vip) ;
이거 하나만 하면 실행이 되는데..
왜 아래 구문에선 저렇게 하면 에러가 나고
안 되는지요?
-- run 님이 쓰신 글:
>> desc data (제품정보 테이블 table)
>> item varcher(2) // 제품고유번호 유니크
>> total number(5) // 총 수량
>> name varcher(10) // 제품명
>> ...
>> ...
>>
>> desc part (고객이 산 물품 table)
>> item varchar(2) // 제품번호
>> cust varchar(20) // 고객아이디
>> qua number(2) // 수량
>>
>>
>> desc vip (vip 고객 table)
>> cust varchar(20)
>>
>> 위 테이블 3개에서 data.item = part.item && part.cust = vip.cust 같습니다.
>>
>> 다음과 같은 쿼리를 구하려고 합니다..
>> 제품번호 | 제품명 | 총수량 | vip회원을제외한고객이 산 종목별 토탈수량 |
>> vip회원만이 산 종목별 수량 | 종목별 총판매수량
>>
>> data.item | data.name | data.total | (part.number)- (vip.cust) | part.number중 vip만 |
>> sum(part.number)
>>
>>
>>
>> 테이블을 변경하거나 추가하지 않고 위 테이블을 토대로 위와 같은 쿼리를 구할려고 합니다..
>> 디비는 오라클 815 입니다.
>>
>> 대충 아래와 같은 쿼리가 있어야 할꺼 같은데요..
>> 아래대로 하면 안 되고요..
>> 나름대로 하긴 했지만 구문이나 모든 것이 틀린거 같거든요..
>> 어떻게 해야 할지... 부탁드립니다..
>>
>> SELECT a.item, a.name, a.total, sum(b.number) 회원, sum(b.number) vip
>> FROM data a , part b, vip c
>> WHERE a.item=b.item and b.cust=c.cust
>> GROUP by a.item, a.name, a.total
>> HAVING sum(회원) = (select number from part where cust not (select cust from vip) ) and sum(vip) = (select number from part where cust in (select cust from vip) )
>> ORDER BY a.itemcd desc, a.itemcd ;
>>
>>
>> 이렇게 쿼리를 하면 각 종목별로 해서 내용이 나와야 하거든요..
>> 어떻게 해야 할지...부탁드립니다.
|