sql - Oracle 11 SQL:有没有办法将 1 行拆分为 x 行
问题描述
客户要求将 Oracle DB SQL 中的 1 行拆分为 6 行。
假设,最初的 SQL(具有多个连接的复杂 sql 等)正在拉入 9 列:
从 X、Y、Z 中选择 A、B、C、D、E、F、G、H、I。. . (但相当复杂的查询)
1) A、B、C、D、E、F、G、H、I。
现在,客户要求返回上述模式的每一行,新输出应如下所示:
1)A,B,C,'D',D
2)A,B,C,'E',E
3)A, B、C、'F'、F
4) A、B、C、'G'、G
5) A、B、C、'H'、H
6) A、B、C、'I'、I
基本上,第一 3 列将在所有 6 个新行中重复。
该过程对原始查询中的每一行重复。
这可能吗 ?如果是,如何?
解决方案
可能最简单的使用union all
:
select a, b, c, 'D' as which, d as val from t union all
select a, b, c, 'E', e from t union all
select a, b, c, 'F', f from t union all
select a, b, c, 'G', g from t union all
select a, b, c, 'H', j from t union all
select a, b, c, 'I', i from t ;
这是最简单的方法,但不是最有效的。它将为每一列扫描一次表。对于不太大的表,从性能角度来看,这可能很好(表缓存在内存中)。
如果“表”确实是一个视图,那么性能可能是一个更重要的问题。
推荐阅读
- python - 电子邮件临时密码
- angular - Angular 应用程序将 Array 检测为 Object 并返回错误
- c# - JQUERY ajax 将 JSON 发布到 C# MVC 控制器,但传入的数据为空
- javascript - 如何将状态作为道具传递?(未定义的错误)
- django - 在 Django 中转换为 Base64 之前调整图像大小
- html - 如何剪切 img 背景并禁用默认响应行为?
- java - Eclipse 和 Processing 之间的窗口大小不同
- python - 如何在期间按天对 pandas 数据帧进行重新采样?
- python - 使用机器人向 Discord 频道发送消息
- python-3.x - 如何从 pandas 列中生成 X 个随机 3 组?