sql - 如何在 Oracle 的 SQL 中打印模式输出
问题描述
我有一张包含以下数据的表格
表:雇员
姓名 |
---|
一种 |
乙 |
C |
D |
预期输出:
名字 |
---|
一种 |
AB |
美国广播公司 |
A B C D |
我只知道如何以水平形式打印数据
SELECT LISTAGG(name,'|')
FROM emp;
不知道如何削减水平并获得预期的输出
解决方案
这是一个选项:
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>
基本上,在temp
CTE 中聚合列值(并查找行数),然后在分层查询中获取子字符串,该查询的级别与表中的行数一样多。
推荐阅读
- react-native - 反应原生地图 mapView maxZoomLevel 意外行为
- sql - 在 SQL Server 中格式化 Datetime2
- symfony - Symfony2 重新组织配置文件:parameters.dist.yml 问题
- python - 当我在 arduino 中使用 pyserial 时,为什么会出现 Windows 错误 2?
- android - Cordova 构建 Android 返回错误任务':transformDexArchiveWithExternalLibsDexMergerForArmv7Debug'的执行失败
- ios - 如何在 SwiftUI 中制作水平列表?
- linux - linux中的排序命令不能“正确”工作
- docker - 是否有 docker 图像标记而不依赖于图像 ID
- sql-server - SQL Server 中的 MD5 哈希
- typescript - 发布到 Azure 的问题:当“--module”为“无”时无法使用导入