oracle 가변적 행을 컬럼으로 변경하고 싶은데 sql로는 도저히 안되서 함수나 프로시저 사용이 가능할까요? 0 4 1,590

by njnj [SQL Query] [2021.02.24 11:24:41]


가변적인 행을 컬럼으로 변경하고 싶은데 sql로는 도저히 안되는거 같아서요...

혹시 procedure나 function으로 가능할까요...?

만약 가능하다면 도움 부탁드려요...ㅠㅠ

예제는 아래와 같습니다!

 

before

A 1
B 2
C 3
D 4
E 5
F 6
G 7

 

after

A B C D E F G
1 2 3 4 5 6 7
by 마농 [2021.02.24 13:33:20]

1. 컬럼명이 표시가 안되어 헷갈리네요.
- before 의 경우 (코드, 값)으로 유추가 가능한데?
- after 의 경우
- a,b,c 가 1행이고, 1,2,3 이 2행인가요?
- a,b,c 가 컬럼명이고, 1,2,3 이 1행인가요?
2. 가변이라는게 어떻게 가변이 되는 건가요?
- 조회 조건에 따라 조회 되는 범위나 건수가 달라지는 건가요?
3. 구현 방안은
- 행을 열로 바꾸는 것은 피벗 쿼리를 이용해야 합니다.
- 가변 컬럼은 동적쿼리로 구현하셔야 합니다.
- 결과는 sys_refcursor 타입의 변수를 이용하셔야 합니다.


by njnj [2021.02.24 14:23:46]

앗 컬럼명이 없네요 ㅠㅠ 이렇게 정해져있습니다.

1.

기존

col1 col2
A 1
B 2
C 3
D 4
E 5
F 6
G 7

 

변경 col1의 값으로 컬럼생성

컬럼명 A B C D E F G
1 2 3 4 5 6 7

 

2. col1 에서 계속 행이 추가가 됩니다.

 

3. 피벗 쿼리도 직접 in절에 ('A', 'B', ... ) 등 이런식으로 추가해야하지 않나요? ㅠ


by 마농 [2021.02.24 14:29:52]

1. 어차피 피벗 쿼리는 정적 쿼리로 미리 구현해 보셔야 합니다.
2. 이렇게 미리 구현해 본 형태대로 동적쿼리를 만들어 내야 합니다.
3. 만들어낸 동적쿼리 결과를 REFCURSOR 로 전달해야 합니다.
4. 최종 전달받은 커서를 프로그램에서 이용해야 합니다.

http://gurubee.net/article/84071


by njnj [2021.02.24 16:16:03]

좋은정보 감사합니다! 바로 해봐야겠네요!

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