2015-02-27 1 views
0

J'ai une table avec colonne de date et que vous souhaitez obtenir une chaîne avec des années distinctes:Oracle: année d'extrait de date listagg

ID DATA 
1 01/01/2010 
2 02/01/2010 
3 01/03/2011 
4 03/01/2014 
5 05/02/2014 

Dans le tableau ci-dessus et en utilisant listagg je veux les années

2010 
2011 
2014 

Mais quand je lance la requête suivante:

SELECT LISTAGG(EXTRACT(year from data),',') 
     WITHIN GROUP (ORDER BY data) 
FROM (SELECT distinct EXTRACT(year from data) 
     FROM t_teste) 

je reçois le er suivant ROR

ORA-00904: "DATA": identifiant invalide

Toute idée de ce que je fais mal?

+0

Vous essayez d'utiliser la colonne 'data'. Est-ce dans la table 't_teste'? – mmmmmpie

Répondre

3

Vous utilisez une sous-requête qui ne spécifie pas d'alias pour votre valeur d'année extraite et la colonne data de votre table n'est plus visible - car elle est uniquement visible dans la sous-requête.

Vous pouvez ajouter un alias de colonne, puis reportez-vous à ce que directement dans la requête externe, sans besoin d'un autre extrait:

select listagg(anno, ',') within group (order by anno) 
from (
    select distinct extract(year from data) as anno 
    from t_teste 
); 

LISTAGG(ANNO,',')WITHINGROUP(ORDERBYANNO) 
----------------------------------------- 
2010,2011,2014       
+0

Cela l'a fait merci beaucoup !! – NMRDC