SQL 2000 을 사용하고 있습니다..
안녕하세요..^^
아무리 생각해도 잘 풀리지 않는 것이 있어서 이곳에 물어 보려 합니다..
우선 데이터가 아래와 같이 있다고 한다면..
전표일자, 전표번호, 구분, 장소, 수량
20040101 0001 1 H0001 10
20040101 0001 1 H0002 10
20040102 0001 2 H0003 4
20040102 0002 2 H0003 5
...
테이블을 보니 키가 전표일자, 전표번호, 구분, 장소 까지가 키로 정해져 있습니다.
그래서.. 전표번호가 중복으로 만들어 지더군요..
그리고 장소를 빼고는 중복된 데이터는 내용이 같습니다.
근데.. 쿼리는 전표 번호가 중복되지 않게 만들어야 한다는데..
도저히 생각해도 않되더군요..
SELECT 전표일자, 전표번호, 구분, 장소, 수량
FROM TJaego
......
저 위에 눈에 보이는 데이터 중에 아래와 같이 뽑아 오려면.. 어케 쿼리를 만드는것이 좋을까요?
조건은
1.전표일자와 전표번호는 무조건 하나만 나와야 한다
2. 만약 두개가 있다면.. 장소가 큰것이 나와야 한다
이 두 조건을 만족하게 뽑아 내면.. 아래와 같이 되는데.. 방법이 생각 않남니다..
전표일자, 전표번호, 구분, 장소, 수량
20040101 0001 1 H0002 10
20040102 0001 2 H0003 4
20040102 0002 2 H0003 5
...
부탁 드립니다.. 방법좀 알려주세요...
전 다른 query문을 제안하고자 합니다..
일단,
data를 뽑아내는 경우의수를 대부분 index차원에서
해결하고자 했습니다.
물론, 좀 길어지긴 했습니다만...
이것이 답은 아니라고 여겨집니다..
data건수가 얼마나 되는지 몰라서.. *^^*
partitioning이 되어있는지도 몰라서.. *^^*
일단 아래 sql문을 제안합니다..
※ 단, 테이블에서 full searching을 하지 않으며,
조회될 data가 전표일자 구간을 이용해서
index 분포도가 10%미만일때에만 아래 SQL문을
권장합니다..
(전표일자를 아마도 지정해서 조회를 할 것 같은 예감이 드는군요..
그래서.. 전표일자를 넣었죠.. *^^*)
ps.
만약, full searching을 하시고자 한다면,
explain(실행계획)을 확인하셔서,
filter하는 형식을 취한다면,
조금 빠른 결과를 나타내리라 여겨집니다..
[제안 SQL]
SELECT A.전표일자,
A.전표번호,
A.구분,
A.장소,
(SELECT 수량 FROM 테이블명(?)
WHERE 전표일자 = A.전표일자
AND 전표번호 = A.전표번호
AND 구분 = A.구분
AND 장보 = A.장소) SU
FROM ( SELECT 전표일자,
전표번호,
구분,
MAX(장소) LOC
FROM 테이블명(?)
WHERE 전표일자 >= '20040101'
AND 전표번호 <= '99999999'
GROUP BY 전표일자,전표번호,구분
) A