我有一个带有日期列的表,并且希望获得具有不同年份的字符串:
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":无效标识符
知道我做错了吗?
答案 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