简体   繁体   English

在一行中报告多个记录中的值

[英]Reporting values from multiple records in one row

How can I displaying multiple records in one row in oracle without creating a stored procedure? 如何在不创建存储过程的情况下在oracle中一行显示多个记录?

Data Set: 资料集:

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

Desired Result: 所需结果:

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

For each job I must have the biggest dates 我必须为每项工作安排最长时间的约会

The solution I see is to create a temporary table by Job and make union with name!! 我看到的解决方案是通过Job创建一个临时表并使用名称进行联合!

Something like this should do provided you know exactly which values can be found in Job . 只要您确切知道可以在Job找到哪些值,就应该执行类似的操作。 And in 11G or newer, yes. 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))

Oracle Setup : 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;

Query : 查询

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;

Results : 结果

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           

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM