【问题标题】:Convert Specific Field of Rows into seperated columns in oracle在oracle中将特定的行字段转换为单独的列
【发布时间】:2022-06-28 22:23:16
【问题描述】:

我遇到了一个具有挑战性的案例。如果有人提供帮助,我真的很感激...... 假设我们有以下一组记录:

ID Date
20220614175302951087 6/15/2022 13:27
20220614175302951087 6/15/2022 14:06
20220614175302951088 6/15/2022 13:27
20220614175302951088 6/15/2022 14:07
20220614175302951088 6/15/2022 14:42
20220614175302951089 6/15/2022 13:28
20220614175302951089 6/15/2022 14:08
20220614175302951089 6/15/2022 14:39
20220614175302951090 6/15/2022 13:38
20220614175802951200 6/15/2022 9:58
20220614175802951200 6/15/2022 10:28

我需要将结果显示为

ID Date1 Date2 Date3
20220614175302951087 6/15/2022 13:27 6/15/2022 14:06
20220614175302951088 6/15/2022 13:27 6/15/2022 14:07 6/15/2022 14:42
20220614175302951089 6/15/2022 13:28 6/15/2022 14:08 6/15/2022 14:39
20220614175802951200 6/15/2022 9:58 6/15/2022 10:28

谢谢大家

【问题讨论】:

  • 如果您标记了pivot,那么您似乎知道您需要的功能。您能否描述一下您目前在使用代码时遇到的问题?
  • 是第 3 行的最大编号。或者它们可以是任何编号,然后您需要列为 Date4、Date5、Date6 等...
  • @AnkitBajpai 嗨,是的。最多 3 个。
  • @astentx 嗨,正如我所尝试的,我所知道的所有枢轴模式都无法涵盖这种情况。我标记了是否有人知道其他模式。

标签: oracle pivot


【解决方案1】:

如果日期数最多为 3,您可以使用条件聚合方法和 ROW_NUMBER 来实现您的结果 -

SELECT ID,
       MAX(CASE WHEN RN = 1 THEN DATE ELSE NULL END) Date1,
       MAX(CASE WHEN RN = 2 THEN DATE ELSE NULL END) Date2,
       MAX(CASE WHEN RN = 3 THEN DATE ELSE NULL END) Date3
  FROM (SELECT ID, DATE,
               ROW_NUMBER() OVER(PARTITION BY ID ORDER BY DATE)
          FROM YOUR_TABLE)
 GROUP BY ID;

【讨论】:

    猜你喜欢
    • 2021-11-24
    • 2021-09-14
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多