如何在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创建一个临时表,并使用名称联合!!
答案 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