报告一行中多个记录的值

时间:2016-02-14 22:05:45

标签: sql oracle

如何在oracle中的一行中显示多条记录而不创建存储过程?

数据集:

Name        Job    Update_date
Armstrong   IDE    07/02/2014
Armstrong   IDE    05/02/2015
Armstrong   IDEC   03/02/2016
Armstrong   LT     14/02/2016
Beyonce     LT     12/02/2015
Beyonce     LTC    12/02/2016
Deadpool    LT     05/02/2015

期望的结果:

Name        IDE         IDEC        LT          LTC
Armstrong   05/02/2015  03/02/2016  14/02/2016  null
Beyonce     null        null        12/02/2015  12/02/2016
Deadpool    null        null        05/02/2015  null

对于每项工作,我必须有最大的约会

我看到的解决方案是通过Job创建一个临时表,并使用名称联合!!

2 个答案:

答案 0 :(得分:1)

如果您确切知道Job中可以找到哪些值,则应该这样做。在11G或更新,是的。

SELECT Name,
       IDE,
       IDEC,
       LT,
       LTC
FROM   YOUR_TABLE
PIVOT (
  MAX(Update_date)
  FOR Job IN ('IDE'  AS IDE,
              'IDEC' AS IDEC,
              'LT'   AS LT,
              'LTC'  AS LTC))

答案 1 :(得分:1)

Oracle安装程序

CREATE TABLE Data_Set ( Name, Job, Update_date ) AS
SELECT 'Armstrong',   'IDE',    DATE '2014-02-07' FROM DUAL UNION ALL
SELECT 'Armstrong',   'IDE',    DATE '2015-02-05' FROM DUAL UNION ALL
SELECT 'Armstrong',   'IDEC',   DATE '2016-02-03' FROM DUAL UNION ALL
SELECT 'Armstrong',   'LT',     DATE '2016-02-14' FROM DUAL UNION ALL
SELECT 'Beyonce',     'LT',     DATE '2015-02-12' FROM DUAL UNION ALL
SELECT 'Beyonce',     'LTC',    DATE '2016-02-12' FROM DUAL UNION ALL
SELECT 'Deadpool',    'LT',     DATE '2015-02-05' FROM DUAL;

<强>查询

SELECT Name,
       MAX( CASE JOB WHEN 'IDE'  THEN Update_Date END ) AS IDE,
       MAX( CASE JOB WHEN 'IDEC' THEN Update_Date END ) AS IDEC,
       MAX( CASE JOB WHEN 'LT'   THEN Update_Date END ) AS LT,
       MAX( CASE JOB WHEN 'LTC'  THEN Update_Date END ) AS LTC
FROM   Data_Set
GROUP BY Name
ORDER BY Name;

<强>结果:

NAME      IDE       IDEC      LT        LTC     
--------- --------- --------- --------- ---------
Armstrong 05-FEB-15 03-FEB-16 14-FEB-16           
Beyonce                       12-FEB-15 12-FEB-16 
Deadpool                      05-FEB-15           
相关问题