2014-03-06 81 views
0

需要查詢,顯示單排多行要將單行和單行顯示多行爲多行?

例如:

A,B,C,d,E,F

變化到

C

D

Ë

˚F

查詢,以顯示多個行單列

例如:

Ç

d

Ë

˚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