2014-03-06 2 views
0

하면여러 행을 단일 행 및 단일 행에 여러 행으로 표시 하시겠습니까?

전 여러 행에 하나의 행을 표시하는 쿼리를 필요

A, B, C, D, E, F

변화

B에

c

d

E

F 단일 행에 복수의 행을 표시

쿼리

예 :

B

C

D

E

F

변화

A, B, C, D, E, F

+1

전통적 표현 계층 문제이고, 데이터베이스에 콤마 분리 된 값을 갖는 항 패턴/코드 냄새된다. 관계형 - 데이터베이스 디자인 패턴은 쉼표로 구분 된 목록이 아닌 정규화 된 데이터 용입니다. 왜 데이터 구조를 비 정렬 화해야하는지 보여주는 유스 케이스가 있습니까? 아마도 우리는 당신에게 그것을 요구하지 않는 다른 패턴을 지적 할 수 있습니다. – MatBailie

+0

wm_concat 함수를 사용해보십시오. – jle

답변

0

콤마/테이블 문자열 : How can I select from list of values in Oracle

select column_value from 
    table(sys.dbms_debug_vc2coll('One', 'Two', 'Three', 'Four')); 

SELECT trim(regexp_substr('Err1, Err2, Err3', '[^,]+', 1, LEVEL)) str_2_tab 
    FROM dual 
CONNECT BY LEVEL <= regexp_count('Err1, Err2, Err3', '[^,]+') 
/

쉼표/​​쉼표 표 :

WM_CONCAT() in 10g as jle mentioned or LISTAGG() in 11g. 
1
SQL> with t as (
    2 select 'A,B,C,D,E,F' x from dual 
    3 ) 
    4 select substr(x,(rownum-1)*2+1,1) from t 
    5 connect by level <= regexp_count(x,',')+1 
    6/

S                    
-                    
A                    
B                    
C                    
D                    
E 
F  

SQL> with t as (
    2 select 'A,B,C,D,E,F' x from dual 
    3 ) 
    4 select listagg(s,',') within group (order by s) str 
    5 from (
    6 select substr(x,(rownum-1)*2+1,1) s from t 
    7 connect by level <= regexp_count(x,',')+1 
    8 ) 
    9/

STR                    
--------------- 
A,B,C,D,E,F  
관련 문제