使用oracle将SQL查询取消依赖列

时间:2018-12-06 19:03:50

标签: sql oracle

我正在尝试使用oracle sql查询复制以下情况:

enter image description here

  

我使用联合查询来做到这一点,但是在该查询中我多次击中同一张表,该查询是否还有其他选择?

请注意: col和val是相互依赖的,col_1和val_1也相互依赖

select id,col, val from tbl
union
select id,col_1, val_1 from tbl

2 个答案:

答案 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)

您可以使用PIVOTUNPIVOT运算符来旋转和取消旋转多列,您只需要知道正确的语法即可。根据您的情况,您想UNPIVOT。您正在以期望的输出方式丢失一些信息,也许可以满足您的需求;无论如何,在下面都包含一列,该列显示各对列的 order 。 (有些奇怪,显示1的{​​{1}}和COL/VAL的{​​{1}},但是我认为这些都不是您的真实列名。)如果您不需要输出中的2列,只需将其从COL_1/VAL_1子句中删除即可。

注意-ORD是Oracle保留字,不能为列名。我在输出中将列名更改为SELECTCOLUMN

C