예제는 다음과 같습니다.
WITH T AS (
SELECT 1 SEQ, '영희' AA, NULL BB, '수학' FLAG, 20 FLAG2 FROM DUAL UNION ALL
SELECT 2 SEQ, '영희' AA, NULL BB, '수학' FLAG, 21 FLAG2 FROM DUAL UNION ALL
SELECT 3 SEQ, '영희' AA, NULL BB, '수학' FLAG, 23 FLAG2 FROM DUAL UNION ALL
SELECT 4 SEQ, '영희' AA, NULL BB, '수학' FLAG, 26 FLAG2 FROM DUAL UNION ALL
SELECT 5 SEQ, '영희' AA, 0 BB, '과학' FLAG, 37 FLAG2 FROM DUAL UNION ALL
SELECT 6 SEQ, '영희' AA, 1 BB, '과학' FLAG, 38 FLAG2 FROM DUAL UNION ALL
SELECT 7 SEQ, '영희' AA, NULL BB, '과학' FLAG, 40 FLAG2 FROM DUAL UNION ALL
SELECT 8 SEQ, '영희' AA, NULL BB, '국어' FLAG, 41 FLAG2 FROM DUAL UNION ALL
SELECT 9 SEQ, '영희' AA, NULL BB, '국어' FLAG, 44 FLAG2 FROM DUAL UNION ALL
SELECT 10 SEQ, '영희' AA, NULL BB, '국어' FLAG, 49 FLAG2 FROM DUAL UNION ALL
SELECT 11 SEQ, '철수' AA, NULL BB, '수학' FLAG, 50 FLAG2 FROM DUAL UNION ALL
SELECT 12 SEQ, '철수' AA, NULL BB, '수학' FLAG, 53 FLAG2 FROM DUAL UNION ALL
SELECT 13 SEQ, '철수' AA, NULL BB, '수학' FLAG, 55 FLAG2 FROM DUAL UNION ALL
SELECT 14 SEQ, '철수' AA, NULL BB, '수학' FLAG, 58 FLAG2 FROM DUAL UNION ALL
SELECT 15 SEQ, '철수' AA, NULL BB, '수학' FLAG, 60 FLAG2 FROM DUAL UNION ALL
SELECT 16 SEQ, '철수' AA, NULL BB, '수학' FLAG, 61 FLAG2 FROM DUAL UNION ALL
SELECT 17 SEQ, '철수' AA, NULL BB, '수학' FLAG, 63 FLAG2 FROM DUAL UNION ALL
SELECT 18 SEQ, '철수' AA, 0 BB, '과학' FLAG, 64 FLAG2 FROM DUAL UNION ALL
SELECT 19 SEQ, '철수' AA, NULL BB, '과학' FLAG, 65 FLAG2 FROM DUAL UNION ALL
SELECT 20 SEQ, '철수' AA, NULL BB, '국어' FLAG, 66 FLAG2 FROM DUAL UNION ALL
SELECT 21 SEQ, '제인' AA, NULL BB, '수학' FLAG, 67 FLAG2 FROM DUAL UNION ALL
SELECT 22 SEQ, '제인' AA, NULL BB, '수학' FLAG, 68 FLAG2 FROM DUAL UNION ALL
SELECT 23 SEQ, '제인' AA, NULL BB, '과학' FLAG, 69 FLAG2 FROM DUAL UNION ALL
SELECT 24 SEQ, '제인' AA, 1 BB, '과학' FLAG, 73 FLAG2 FROM DUAL UNION ALL
SELECT 25 SEQ, '제인' AA, NULL BB, '과학' FLAG, 74 FLAG2 FROM DUAL UNION ALL
SELECT 26 SEQ, '제인' AA, NULL BB, '국어' FLAG, 75 FLAG2 FROM DUAL UNION ALL
SELECT 27 SEQ, '제인' AA, NULL BB, '국어' FLAG, 76 FLAG2 FROM DUAL UNION ALL
SELECT 28 SEQ, '제인' AA, NULL BB, '국어' FLAG, 77 FLAG2 FROM DUAL UNION ALL
SELECT 29 SEQ, '제인' AA, NULL BB, '국어' FLAG, 79 FLAG2 FROM DUAL UNION ALL
SELECT 30 SEQ, '제인' AA, NULL BB, '국어' FLAG, 90 FLAG2 FROM DUAL)
SELECT * FROM T
제가 얻고자 하는 결과값은
수학 과학0 과학1 국어
영희 20 37 38 49
철수 50 64 65 66
제인 67 69 73 90
문제는
수학점수는 학생별 최소값
국어점수는 학생별 최대값
여기까지는 별 문제가 없는데
과학 0과 1값을 구하기가 어렵네요 ㅜㅜ 나름 머리를 굴리는데
과학항목에서 BB값이 0, 1둘다 있으면 문제가 되지 않으나
0 또는 1이 없는 경우 가 문제가 됩니다.
0이 없을경우 1을 기준으로 이전값중 가장 가까운 값을 가져와야하고요
1이 없을경우는 0을 기준으로 다음값중 가장 가까운 값을 가져오는 쿼리문입니다.
SEQ는 순번이고 BB는 0또는 1 이외는 없습니다 이름별로 0, 1 한셋트이고요, Flag는 순번과 마찬가지로 증가값입니다.
프로그램을 제작하지 않고 쿼리로만 하려고 하니 힘드네요 ㅠㅠ
도움을 부탁드리겠습니다.
감사합니다.
|