【问题标题】:How to apply conditional aggregate function in a pivot?如何在数据透视中应用条件聚合函数?
【发布时间】:2018-01-24 00:01:50
【问题描述】:

我有以下查询:

SELECT "CASE_RECORD_ID",
  "OPEN_DT",
  "PENDING_DT",
  "CLOSED_DT"
FROM
  (SELECT case_record_id,
    workflow_status_cd,
    workflow_status_dt
  FROM case_workflow_status
  ) PIVOT ( MIN(workflow_status_dt) FOR workflow_status_cd IN ('O' AS open_dt, 'P' AS pending_dt, 'C' AS closed_dt) );

如何根据 workflow_status_cd 应用不同的聚合函数?我的非工作尝试如下:

SELECT "CASE_RECORD_ID",
    "OPEN_DT",
    "PENDING_DT",
    "CLOSED_DT"
  FROM
    (SELECT case_record_id,
      workflow_status_cd,
      workflow_status_dt
    FROM case_workflow_status
    ) 

    PIVOT (

    (
    CASE workflow_status_cd
        WHEN 'O' THEN MIN(workflow_status_dt)
        WHEN 'P' THEN MAX(workflow_status_dt)
        WHEN 'C' THEN MAX(workflow_status_dt)
    END
    )
      FOR workflow_status_cd IN ('O' AS open_dt, 'P' AS pending_dt, 'C' AS closed_dt) 
  );

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    只需使用适当的聚合函数和 CASE 语句来匹配适当的状态:

    SELECT CASE_RECORD_ID,
           MIN( CASE WHEN workflow_status_cd = 'O' THEN workflow_status_dt END ) AS OPEN_DT,
           MAX( CASE WHEN workflow_status_cd = 'P' THEN workflow_status_dt END ) AS PENDING_DT,
           MAX( CASE WHEN workflow_status_cd = 'C' THEN workflow_status_dt END ) AS CLOSED_DT
    FROM   case_workflow_status
    GROUP BY CASE_RECORD_ID;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多