오라클 ORDER BY 절 조건을 걸고 싶습니다. 0 6 1,923

by 개발2년차 [SQL Query] [2017.01.05 16:51:19]


안녕하세요 오라클 쿼리를 짜다가 문제에 봉착하여 질문 드립니다.
아래와 같은 테이블구조에서 데이터를 SELECT 해 와야 합니다. 
SELECT 할 때 조건이 있는데 앞의 두개 컬럼은 ACCT_PRD , GUBUN_CODE / 마지막 컬럼은 INSERT_ID, INSERT_DATE 순서가 되어야만합니다. 그리고 가운데에는 COL_ 접두어가 붙은 컬럼이 숫자순서대로 와야 하구요. 
EX) ACCT_PRD, GUBUN_CODE, COL_1, COL_2, .... COL_11, INSERT_ID, INSERT_DATE 

그런데 중요한 건 COL_ 로 시작하는 컬럼이 몇개가 있을 지 모릅니다. 
유사한 테이블이 100개가 넘는 상황(COL_ 컬럼 개수만 다릅니다) 에서, 위 순서대로 컬럼을 가져와야
하는데 방법이 있을까요? 

오라클에서는 컬럼 순서를 지정해서 추가하지 못해(가장 뒤로감) 생기는 문젠데요. 
혹시 방법을 아시는 분은 조언 부탁드리겠습니다ㅠ  
 


WITH T1 AS 
(SELECT
                  '201612' ACCT_PRD
                , 'A100' GUBUN_CODE
                ,'1' COL_1
                ,'2' COL_2
                ,'3' COL_3
                ,'4' COL_4
                ,'5' COL_5
                ,'6' COL_6
                ,'7' COL_7
                ,'8' COL_8                
                ,'9' COL_9
                ,'aaa' insert_id 
                ,'2016-01-04' insert_date
                ,'10' COL_10
                ,'11' COL_11
                FROM DUAL) 

SELECT * FROM T1

 

by 랑에1 [2017.01.05 17:03:56]

정확히 원하시는 상황이 뭔지 모르겠어서

이걸로 해결될지는 모르겠지만

order by 1, 2, 3 ... 이라고 적으시면 컬럼순서대로 정렬되기는 합니다.

 

 


by 개발2년차 [2017.01.05 17:14:00]

COL_1 부터 COL_XX까지 몇개가 있는 지 모른다는 가정하에 쿼리를 작성해야 합니다.
나머지 컬럼은 고정이기 때문에 표기가 가능하구요.


by jkson [2017.01.05 17:25:24]

표현해야할 컬럼이 몇개인지 알지 못하는 이유가 무엇인가요? SELECT절 컬럼이 동적으로 바뀐다면

ORDER BY 절도 동적으로 바꾸면 될텐데요.


by jkson [2017.01.05 17:48:20]

다이나믹 쿼리 만드신다면 SELECT절 컬럼을 가지고 와서 붙여넣으세요.

SELECT LISTAGG(COLUMN_NAME,',') WITHIN GROUP(ORDER BY DECODE(COLUMN_NAME,'ACCT_PRD',-2,'GUBUN_CODE',-1,'INSERT_ID',1,'INSERT_DATE',2,0),COLUMN_ID) "COLUMNS" 
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = '테이블명'
AND (COLUMN_NAME LIKE 'COL%' OR  COLUMN_NAME IN ('ACCT_PRD','GUBUN_CODE','INSERT_ID','INSERT_DATE'))

다시 생각해보니 이건 좀 아닌듯..; 사용할 때마다 call이 발생해서 좋지 않겠네요. 해당 뷰 자체도

가벼운 편도 아니구요. 정확히 어떤 걸 원하시는지부터 명확히 알아야 할 것 같네요.

 


by 우리집아찌 [2017.01.06 09:25:17]

무식하지만..

올컬럼 인덱스 생성... 인덱스로 정렬!!!!

 


by 마농 [2017.01.06 09:33:39]

ORDER BY(정렬)에 관한 질문이 아닌 듯 하네요.

테이블 컬럼 순서에 대한 질문인 듯.

 

테이블에 새로운 컬럼을 ADD 했을 때
신규 컬럼이 맨 뒤에 붙는 문제를 얘기하는 듯 하네요.
컬럼을 지정된 위치에 한번에 끼워 넣는 방법은 없구요.
여러 복잡한 절차를 거쳐서 테이블을 재생성해서 원하는 순서대로 지정할 수는 있겠지요.
컬럼 ADD 만으로 원하는 결과를 얻고자 한다면?
뷰를 만들어 이용하는 방법을 사용해야 할 듯 하네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입