我有一个带有日期列的表,希望获得一个具有不同年份的字符串:
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":无效标识符
知道我做错了什么吗?
您使用的子查询没有为提取的年份值指定别名,并且表中的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