首页 > 解决方案 > 如何在 Oracle 的 SQL 中打印模式输出

问题描述

我有一张包含以下数据的表格

雇员

姓名
一种
C
D

预期输出

名字
一种
AB
美国广播公司
A B C D

我只知道如何以水平形式打印数据

SELECT LISTAGG(name,'|') 
  FROM emp;

不知道如何削减水平并获得预期的输出

标签: sqloracle

解决方案


这是一个选项:

SQL> with test (col) as
  2    (select 'A' from dual union all
  3     select 'B' from dual union all
  4     select 'C' from dual union all
  5     select 'D' from dual
  6    ),
  7  temp as
  8    (select listagg(col) within group (order by col) val,
  9            count(*) cnt
 10     from test
 11    )
 12  select substr(val, 1, level) result
 13  from temp
 14  connect by level <= cnt;

RESULT
----------
A
AB
ABC
ABCD

SQL>

基本上,在tempCTE 中聚合列值(并查找行数),然后在分层查询中获取子字符串,该查询的级别与表中的行数一样多。


推荐阅读