【问题标题】:To display multiple row into single & single row into multiple row?将多行显示为单行和单行显示为多行?
【发布时间】:2014-04-09 13:39:09
【问题描述】:

需要查询以显示单行到多行

例如:

A,B,C,D,E,f

改成

一个

B

C

D

E

F

查询将多行显示为单行

例如:

一个

B

C

D

E

F

改成

A,B,C,D,E,F

【问题讨论】:

  • 传统上这是一个表示层问题,并且在数据库中使用逗号分隔值是一种反模式/代码异味。关系数据库设计模式用于规范化数据,而不是逗号分隔的列表。您是否有一个用例来说明为什么需要对数据结构进行去规范化?也许我们可以为您指出不需要这样做的不同模式。
  • 试试 wm_concat 函数

标签: sql oracle


【解决方案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    

【讨论】:

    【解决方案2】:

    逗号/字符串到表格: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. 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 2020-07-05
      • 2014-06-07
      • 2014-06-23
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      相关资源
      最近更新 更多