【问题标题】:Oracle SQL Pivot Multiple ColumnsOracle SQL Pivot 多列
【发布时间】:2019-09-21 17:12:31
【问题描述】:

我有一个数据集,其中 1 个 LICENSE_ID 已拆分为多行。我想合并这些行,因此每个 PERSON_ID 和 LICENSE_ID 组合有 1 行。

这是我的数据的格式:

SELECT '123456789' AS PERSON_ID, '1' AS LICENSE_ID, 'NUMBER' AS FIELD, '123' AS EXPECTED, '124' AS ACTUAL, 'UPDATE' AS ACTION FROM DUAL UNION ALL
SELECT '123456789' AS PERSON_ID, '1' AS LICENSE_ID, 'ISSUE_DT' AS FIELD, '43498' AS EXPECTED, '43498' AS ACTUAL, 'NA' AS ACTION FROM DUAL UNION ALL
SELECT '123456789' AS PERSON_ID, '2' AS LICENSE_ID, 'NUMBER' AS FIELD, '888' AS EXPECTED, '888' AS ACTUAL, 'NA' AS ACTION FROM DUAL UNION ALL
SELECT '123456789' AS PERSON_ID, '2' AS LICENSE_ID, 'ISSUE_DT' AS FIELD, '43498' AS EXPECTED, '' AS ACTUAL, 'UPDATE' AS ACTION FROM DUAL

表格如下所示:

我需要的输出是这样的:

【问题讨论】:

    标签: sql oracle pivot transpose unpivot


    【解决方案1】:

    您可以使用条件聚合:

    select person_id, licence_id,
           max(case when field = 'NUMBER' then expected end) as expected_number,
           max(case when field = 'NUMBER' then actual end) as actual_number,
           max(case when field = 'NUMBER' then actual end) as actual_number,
           max(case when field = 'ISSUE_DT' then expected end) as expected_issue_dt,
           max(case when field = 'ISSUE_DT' then actual end) as actual_issue_dt,
           max(case when field = 'ISSUE_DT' then action end) as actual_issue_dt_action,
    from t
    group by person_id, licence_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2021-02-03
      • 2020-07-02
      • 1970-01-01
      • 2011-03-15
      • 2013-03-15
      相关资源
      最近更新 更多