【问题标题】:Splitting a row at a given column在给定列拆分行
【发布时间】:2020-01-17 12:15:25
【问题描述】:

我有一排有 12 列。我需要为这个应用程序创建 2 行,前 6 列在第一行,后 6 列在第二行。

COL1 COL2 COL3 COL4 COL5 COL6 COL7 COL8 COL9 COL10 COL11 COL12

我需要这样的东西:

COL1 COL2 COL3 COL4 COL5 COL6 COL7 COL8 COL9 COL10 COL11 COL12

这有可能实现吗?

【问题讨论】:

  • 您可能想要添加一些示例输入和输出,特别是 4 行或更多数据。
  • 从广义上讲,这是一个显示问题,因此应该在 UI 中解决,而不是在 SQL 查询中解决。你还关心COL7, COL8, COL9, COL10, COL11, COL12的哪一行跟COL1, COL2, COL3, COL4, COL5, COL6的哪一行?

标签: oracle split rows


【解决方案1】:

如果列都是相同的类型,那么联合查询可能会起作用:

SELECT COL1, COL2, COL3, COL4, COL5, COL6 FROM yourTable
UNION ALL
SELECT COL7, COL8, COL9, COL10, COL11, COL12 FROM yourTable;

【讨论】:

  • 我们怎么知道哪个COL7, COL8, COL9, COL10, COL11, COL12和哪个COL1, COL2, COL3, COL4, COL5, COL6搭配?
  • @APC 好吧,我希望 OP 能澄清这一点。
【解决方案2】:

除了 tim 的回答,你也可以使用 connect by,如下:

SELECT T.RN,
CASE WHEN LVL = 1 THEN COL1 ELSE COL7 END,
CASE WHEN LVL = 1 THEN COL2 ELSE COL8 END,
CASE WHEN LVL = 1 THEN COL3 ELSE COL9 END,
CASE WHEN LVL = 1 THEN COL4 ELSE COL10 END,
CASE WHEN LVL = 1 THEN COL5 ELSE COL11 END,
CASE WHEN LVL = 1 THEN COL6 ELSE COL12 END
FROM (SELECT ROWNUM RN, T.* FROM YOUR_TABLE T)
JOIN (SELECT LEVEL AS LVL
FROM DUAL CONNECT BY LEVEL <= 2) ON (1=1)

干杯!!

【讨论】:

    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多