0

我有一个带有日期列的表,并希望获得一个具有不同年份的字符串:

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": 无效标识符

知道我做错了什么吗?

4

1 回答 1

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                           
于 2015-02-27T16:49:26.027 回答