【发布时间】:2019-12-06 16:38:01
【问题描述】:
客户要求将 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,'我',我
基本上,前 3 列将在所有 6 个 NEW ROWS 中重复。
对原始查询中的每一行重复该过程。
这可能吗?如果是,如何?
【问题讨论】:
-
是 A、B、C、D、E、F、G、H 列名还是实际值
-
它们是从各个表中提取的值
-
有点不清楚,能否提供列名和值
-
这是可能的,使用
unpivot运算符(最有效的方法;还有其他方法)。如果您显示的是复杂查询的结果,那没关系;将其全部视为子查询(可能在with子句中)。但是,更大的问题是,如果带有连接和诸如此类的“大查询”以不是所需格式的格式给出结果,那么为什么首先要以这种方式编写大查询?可能有更有效的方法可以直接获得所需的结果,而不是通过取消旋转您目前的结果。 -
@mathguy : 最初的请求是带有连接等的大查询。然后,在我们交付项目后,客户要求 chagne --- 不知道客户为什么要求更改。你能请。请用 unpivot 操作员回答?谢谢。