달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

얼마전 요청받았던 쿼리... 여기 저기 찾아보고 만들었는데... 잘된다.
단, Oracle 9i 이상에서만 되는듯... 8i 는 다른 방법을 써야 하나보다..

컬럼의 속성과 해당 컬럼을 사용하는 테이블 이름은 가로로 표현하고 싶다는 내용. 성능은 고려하지 않음.
pivot 사용은 어떨까 고민해 봤지만... 행의 수가 결정되어 있어야 하고 그렇게 작성이 가능하다 해도 쿼리문이 너무 길어질 듯 해서..
connect by 사용하기로 결정.


SELECT CNAME, COLTYPE, WIDTH, MAX(SYS_CONNECT_BY_PATH (TNAME, '|')) AS TABLE_NAME
FROM (
    SELECT CNAME, COLTYPE, WIDTH, TNAME
        ,(ROW_NUMBER () OVER (PARTITION BY CNAME, COLTYPE, WIDTH  ORDER BY TNAME  )) RNUM
    FROM COL
) START WITH RNUM = 1 CONNECT BY PRIOR RNUM = (RNUM - 1)
AND PRIOR CNAME = CNAME AND PRIOR COLTYPE = COLTYPE AND PRIOR WIDTH = WIDTH
GROUP BY CNAME, COLTYPE, WIDTH;


SYS_CONNECT_BY_PATH 에서 처리 가능한 문자열 길이가 정해져 있나 부다...
너무 길면 에러 발생. ㅠㅠ
:
Posted by Elick