Я работаю над Oracle 11g и пытаюсь написать запрос, который будет вставлять '?' за все пропущенные месяцы между двумя датами. Этого я могу добиться. Однако теперь я хочу сопоставить все записи определенного столбца в одной записи. Я использовал функцию 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 не может распознать столбец статуса объекта, и поэтому я не могу достичь желаемого результата.
Любая помощь будет принята с благодарностью.
Спасибо
GROUP BY facilitynumber
, поэтому вы получаете эту ошибку. Удалите группу и получите строки за последний месяц, это может сработать. - person Vijayakumar Udupa   schedule 23.12.2016