2015-02-27 3 views
0

У меня есть таблица с датой колонкой и хотел бы получить строку с различными годами:Oracle: экстракт год от даты в listagg

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

Из приведенной выше таблицы и с помощью listagg я хочу, чтобы получить года

2010 
2011 
2014 

Но когда я запускаю следующий запрос:

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

Я получаю следующее эр ROR

ORA-00904: "DATA": недопустимый идентификатор

Любая идея, что я делаю неправильно?

+0

Вы пытаетесь использовать столбец 'DATA'. Это в таблице 't_teste'? – mmmmmpie

ответ

3

Вы используете подзапрос, который не указывает псевдоним для вашего извлеченного значения года, а столбец data из вашей таблицы больше не отображается - так как он находится только в области внутри подзапроса.

Вы можете добавить псевдоним столбца, а затем обратиться к тому, что непосредственно во внешнем запросе, без необходимости другого экстракта:

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

Это ему большое спасибо !! – NMRDC