2014-03-06 33 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