Oracle行到列

时间:2017-02-09 21:55:03

标签: sql oracle plsql

旧结果

Column_Name
A
B
C
D

新要求结果

Column_Name
'A', 'B', 'C', 'D'

限制,(计数未知。可以是A,B,C或A,B,C,D,E等。

2 个答案:

答案 0 :(得分:1)

从字面上考虑你的问题,你有一个查询返回一个行可变行数的列,比如说

select 'A' column_name from dual union all
select 'B' column_name from dual union all
select 'C' column_name from dual union all
select 'D' column_name from dual 

并且您需要将结果放在一行中,其中一列包含由''包装的原始查询返回的值的串联;在您的示例中,您需要:

Column_Name
'A', 'B', 'C', 'D'

如果这是正确的,您可能只需要listagg

select listagg('''' || column_name || '''', ', ') within group ( order by column_name)
from (
        select 'A' column_name from dual union all
        select 'B' column_name from dual union all
        select 'C' column_name from dual union all
        select 'D' column_name from dual 
     ) yourQuery

答案 1 :(得分:0)

如果您希望列出某个列中彼此之后的所有值,可以使用LISTAGG
例如:

SELECT LISTAGG(Column_Name, ', ') WITHIN GROUP (ORDER BY Column_Name) "Column_Listing"
FROM TableA;