안녕하세요? 늘 질문만 올리는 왕초보입니다.
아래와 같은 두 테이블이 있습니다.
CREATE TABLE T1(T1_ID varchar(50) NULL, T1_PRICE int NULL)
CREATE TABLE T2(T2_ID varchar(50) NULL, T2_PRICE int NULL)
INSERT INTO T1 VALUES ('A1',100)
INSERT INTO T1 VALUES ('A2',110)
INSERT INTO T1 VALUES ('A3',120)
INSERT INTO T2 VALUES ('A1',30)
INSERT INTO T2 VALUES ('A1',40)
INSERT INTO T2 VALUES ('A1',30)
INSERT INTO T2 VALUES ('A2',30)
INSERT INTO T2 VALUES ('A2',40)
INSERT INTO T2 VALUES ('A2',40)
INSERT INTO T2 VALUES ('A3',30)
INSERT INTO T2 VALUES ('A3',40)
INSERT INTO T2 VALUES ('A3',50)
T1은 합계이고 T2는 개별 항목입니다.
위 예에서는 개별 항목의 합이 T1_PRICE와 일치하지만 실제로는 정확히 일치하지 않는 경우도 있습니다.
위 두 테이블을 조인하여 보면 아래와 같은 결과가 나옵니다.
SELECT T1.T1_ID, T1.T1_PRICE, T2.T2_PRICE FROM T1 LEFT JOIN T2 ON T1.T1_ID = T2.T2_ID
A1 100 30
A1 100 40
A1 100 30
A2 110 30
A2 110 40
A2 110 40
A3 120 30
A3 120 40
A3 120 50
이 결과를 아래와 같이 나타내려면 쿼리를 어떻게 만들어야 할까요? 참고로 SQL 2000 입니다.
A1 100 30
A1 0 40
A1 0 30
A2 110 30
A2 0 40
A2 0 40
A3 120 30
A3 0 40
A3 0 50
고수님들의 답변을 부탁드립니다.
감사합니다.
2000으로는 현재 테이블(T2테이블) 구조로만은 쿼리를 만들기는 힘듭니다..
identity 컬럼나 유니크한 키가 없는 구조에서는 쉽지가 않습니다.
유니크한 키가 있다면
id별 최소값(유니크키) 를 인라인 뷰로 구하고 이 테이블과 조인해서 최소값(유니크키) 과 같은 key인 경우만 price를 보여주고 아니면 0으로 보여주시는 방법으러하시면 됩니다.
1. 없으시면 지금이라도 identity 컬럼을 추가 하시는게 가장 현명 하실듯 합니다.
identity 컬럼을 추가 하시더라도 기존 프로그램에는 큰 영향은없을듯 합니다.
2. 프로시저로 작성.
추천: 빨리 디비 업그레이드를 하심을 .... 쿼리가 2000에 비해서 엄청 단순해짐..