我正在尝试使用oracle sql查询复制以下情况:
我使用联合查询来做到这一点,但是在该查询中我多次击中同一张表,该查询是否还有其他选择?
请注意: col和val是相互依赖的,col_1和val_1也相互依赖
select id,col, val from tbl
union
select id,col_1, val_1 from tbl
答案 0 :(得分:1)
Oracle 12C +支持横向联接,因此您可以执行以下操作:
select t.id, v.col, v.val
from tbl t cross join lateral
(select t.col, t.val from dual union all
select t.col_1, t.val from dual
) v;
答案 1 :(得分:1)
您可以使用PIVOT
和UNPIVOT
运算符来旋转和取消旋转多列,您只需要知道正确的语法即可。根据您的情况,您想UNPIVOT
。您正在以期望的输出方式丢失一些信息,也许可以满足您的需求;无论如何,在下面都包含一列,该列显示各对列的 order 。 (有些奇怪,显示1
的{{1}}和COL/VAL
的{{1}},但是我认为这些都不是您的真实列名。)如果您不需要输出中的2
列,只需将其从COL_1/VAL_1
子句中删除即可。
注意-ORD
是Oracle保留字,不能为列名。我在输出中将列名更改为SELECT
和COLUMN
。
C