我工作的甲骨文11g和我想写一个查询,将插入11克LISTAGG功能“?”在两个日期之间的所有缺失月份。这是我能够实现的。 但是,现在我想整理单个记录中特定列的所有记录。我已经使用LISTAGG函数来实现这一点,但是我收到了LISTAGG函数内部列的错误“无效标识符”。 这里是我的代码: -甲骨文与多个子查询
Select facilitynumber, LISTAGG(facilitystatus, '') WITHIN GROUP (ORDER BY null) "Profile" FROM ( WITH allmonths AS ( SELECT to_date(level, 'MM') AS allmnths FROM dual CONNECT BY LEVEL BETWEEN '01' AND '05' ), months AS ( SELECT * FROM ( SELECT ccds.facilitynumber,ccds.facilitystatus, dsub.filecreationdate as FacilityStatusDate, dsub.submissiondate, ROW_NUMBER() OVER (partition by ccds.facilitynumber,extract(month from dsub.submissiondate) order by dsub.submissiondate DESC) r FROM ccdssubmissions ccds INNER JOIN datasubmission dsub ON ccds.datasubmissionid = dsub.datasubmissionid INNER JOIN datasupplier dsup ON dsub.datasupplierid = dsup.datasupplierid WHERE ccds.matchedcompanynumber = 'TEST9239' ORDER BY dsub.submissiondate DESC ) where r = 1) SELECT allmnths, CASE WHEN facilitystatus IS NULL THEN '?' ELSE facilitystatus END AS "facilitystatus", submissiondate, facilitynumber FROM allmonths LEFT OUTER JOIN months ON extract(month from allmonths.allmnths) = extract(month from months.submissiondate) order by allmnths ) GROUP BY facilitynumber;
我面对错误在第2行本身。我的子查询即查询从 “WITH” 开始的返回结果如下: -
ALLMNTHS| facilitystatus | submissiondate | facilitynumber
--------- | --------------- | --------------- | ---------------
01-JAN-16 | U | 23-JAN-16 | FAC01
01-FEB-16 | ? | null | null
01-MAR-16 | 1 |05-MAR-16 | FAC01
现在使用LISTAGG(facilitystatus, ''),我想我的结果是 - >
Profile| facilitynumber
U?1 | FAC01
但,Oracle无法识别facilitystatus列,因此我无法实现预期的结果。
任何帮助将不胜感激。
谢谢
在你有外部查询'GROUP BY facilitynumber',那就是t他的理由是你得到这个错误。取消组合并获取上个月的行,它可能工作。 –
编号相同的错误。 – Anuja