Oracle:从listagg中提取年份

时间:2015-02-27 16:36:50

标签: oracle oracle11gr2 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)

我收到以下错误

ORA-00904:" DATA":无效标识符

知道我做错了吗?

1 个答案:

答案 0 :(得分: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