지금 오라클에서 작업중입니다.
혹시나 하는 마음에 여기에도 질문을 드려봅니다.
테이블을 예로 들자면
COL1 COL2 COL3 COL4 COL5 COL6
-----------------------------------------------------------
A X X X X 500
B X X X X 500
C X X X X 500
D X O X X 1000
E X O X X 1000
F X X O X 2000
G X X X O 2000
H X X X X 500
I X X X X 500
이렇게 있는 데이터를 다음과 같이 뿌리고 싶습니다.
COL1 COL2 COL3 COL4 COL5 COL6
-----------------------------------------------------------
A ~ C X X X X 500
D ~ E X O X X 1000
F X X O X 2000
G X X X O 2000
H ~ I X X X X 500
GROUP BY로 COL2 ~ COL6까지 걸면 A~C, H~I를 구분을 지을수가 없네요
제발 이렇게 순차적으로 GROUP BY를 걸수 있는 방법좀 알려주세요.
Comment 1
-
최석준
2014.12.15 09:30
CREATE TABLE TEST(COL1 CHAR(1),COL2 CHAR(1),COL3 CHAR(1),COL4 CHAR(1),COL5 CHAR(1),COL6 INT)
INSERT TEST
SELECT 'A','X','X','X','X',500 UNION ALL
SELECT 'B','X','X','X','X',500 UNION ALL
SELECT 'C','X','X','X','X',500 UNION ALL
SELECT 'D','X','O','X','X',1000 UNION ALL
SELECT 'E','X','O','X','X',1000 UNION ALL
SELECT 'F','X','X','O','X',2000 UNION ALL
SELECT 'G','X','X','X','O',2000 UNION ALL
SELECT 'H','X','X','X','X',500 UNION ALL
SELECT 'I','X','X','X','X',500
--------------------------------------------
;WITH CTE AS (
SELECT ASCII(COL1)-ROW_NUMBER() OVER (PARTITION BY COL2,COL3,COL4,COL5,COL6 ORDER BY COL1) R,COL1,COL2,COL3,COL4,COL5,COL6
FROM TEST
)
SELECT CASE MIN(COL1) WHEN MAX(COL1) THEN MIN(COL1) ELSE MIN(COL1) + '~ ' + MAX(COL1) END COL1,COL2,COL3,COL4,COL5,COL6
FROM CTE
GROUP BY R,COL2,COL3,COL4,COL5,COL6
ORDER BY 1
/*
COL1 COL2 COL3 COL4 COL5 COL6
---- ---- ---- ---- ---- -----------
A~ C X X X X 500
D~ E X O X X 1000
F X X O X 2000
G X X X O 2000
H~ I X X X X 500
(5개 행이 영향을 받음)
*/