2017-08-09 4 views
0

J'ai créé une vue avec une colonne concaténée.Oracle SQL - utilisation de listagg sur une colonne concaténée à partir d'une vue

J'ai utilisé avec succès listagg sur les colonnes individuelles, mais lorsque j'ai essayé d'utiliser la colonne concaténée dans le listagg, j'ai reçu l'erreur qu'il s'agissait d'un identificateur invalide.

Existe-t-il un moyen de combiner les colonnes requirement et message_desc dans un format listagg?

ma requête est la suivante:

select a.ID, 
a.NAME, 
a.YEAR, 
count (a.linenum) as count_missing_docs, 
listagg(a.requirement, ',') within group (order by a.requirement) as "reqs", 
listagg(a.MESSAGE_DESC, '...')within group (order by a.MESSAGE_DESC)as "msgs", 
listagg(a.combo,' ') within group (order by a.combo) as "all_info" 
from 
(SELECT 
rownum "LINENUM", 
FTR.ID, 
FTR.NAME, 
FTR.YEAR, 
FTR.REQUIREMENT, 
FTR.STATUS, 
FTR.STATUS_IND, 
FTR.MESSAGE_DESC, 
FTR.REQUIREMENT||'-'||FTR.MESSAGE_DESC||'...' as "combo" 
from TRACKING_REQUIREMENT FTR 
where FTR.year = '1617' 
and FTR.status = 'R' 
and FTR.satisfied_ind = 'N' 
order by 2 , 1 asc) A 
group by 
a.ID, 
a.NAME, 
a.YEAR 
order by 1 

Répondre

3

Le problème est en fait juste que vous continuez à mettre des guillemets doubles autour de vos identifiants - cela indique oracle que vous voulez un identifiant sensible cas, mais vous êtes en se référant à lui sans guillemets, en utilisant un identifiant insensible à la casse (que Oracle semble interpréter en interne comme ALL UPPERCASE).

Il suffit de se débarrasser de toutes les guillemets et votre requête devrait fonctionner correctement.