垂直字符串到水平

时间:2018-08-04 05:49:10

标签: sql database oracle

嗨,我知道如何将ONKAR打印到

O
N
K
A
R

但是我想反过来。我的意思是

O
N
K
A
R

ONKAR

任何人都可以告诉我同样的查询内容。

3 个答案:

答案 0 :(得分:2)

尝试一下:这将为您提供字符串聚合

    select listagg(column1) within group(order by rn) from
(SELECT column1,row_number() over(partition by column1) as rn
    FROM   table)a

答案 1 :(得分:1)

您可以为此使用LISTAGG

样品:

with cte as ( 
    select 1 as pk,'O' AS name from dual
    union all 
    select 2,'N' from dual
    union all 
    select 3,'K' from dual
    union all 
    select 4,'A' from dual
    union all 
    select 5,'R' from dual)
select LISTAGG(name) WITHIN GROUP(ORDER BY pk) from cte

编辑:正如其他注释中已经提到的那样,没有排序键列将是不可能的,因为无法按插入顺序将这些行取出。
如果您添加动态行号,则最好获得的是ANKORROKNA,因为表中没有写明如何获取行的规则。

答案 2 :(得分:1)

最好使用Oracle的伪列Rowid来提供字母的正确顺序:

create table tab( col0 varchar2(50) );
insert all
       into tab values( 'O' )
       into tab values( 'N' )
       into tab values( 'K' )
       into tab values( 'A' )
       into tab values( 'R' )
select * from dual;    

SELECT listagg(col0) within group (order by rd) "My Name is "
  FROM
  (
   SELECT col0, rowid rd
     FROM tab a
    ORDER BY rowid
  );  

SQL Fiddle Demo

P.S。即使rowid不能保证Kaushik所说的那些获取DML的表的列的顺序,我还是建议使用rowid来避免在这种特殊情况下与其他辅助列进行硬编码。