sql - 查询将过去 11 个会计年度作为行返回。我可以使用 LISTAGG() 将其转换为逗号分隔的列表吗?
问题描述
我编写了这个查询来返回最近 11 个会计年度:
SELECT TO_NUMBER(EXTRACT(YEAR FROM ADD_MONTHS(SYSDATE,+3)))-LEVEL+1
FROM DUAL CONNECT BY LEVEL <= 11;
它返回以下内容:
我想将其转换为逗号分隔的 VARCHAR2,如下所示:
'2019,2018,2017,2016,2015,2014,2013,2012,2011,2010,2009'
有没有办法使用LISTAGG()
这个?或者对于直接 PL/SQL 查询(即SELECT
语句;没有DECLARE BEGIN END;
块)的任何其他建议?
谢谢!
解决方案
我将计算子查询中的值,然后使用LISTAGG()
:
with x as (
SELECT TO_NUMBER(EXTRACT(YEAR FROM ADD_MONTHS(SYSDATE,+3)))-LEVEL+1 as y
FROM DUAL CONNECT BY LEVEL <= 11
)
select listagg(y, ',') within group (order by y desc) from x
结果:
LISTAGG(Y,',')WITHINGROUP(ORDERBYYDESC)
------------------------------------------------------
2019,2018,2017,2016,2015,2014,2013,2012,2011,2010,2009
推荐阅读
- javascript - 如何在反应中正确地从 URL 中提取参数
- java - 为什么我在这段代码中得到一个空对象引用?
- python - 从 Tripadvisor 网页抓取电子邮件地址
- javascript - 如何修复递归reduce函数上的Typescript错误
- javascript - 在 iframe 中将 XML 文件显示为 HTML(使用 XSLT)
- node.js - Heroku 不会从我的 Github 存储库中检测到我的 Procfile?
- google-cloud-storage - 尽管设置了 CORS 政策,但 Google Cloud Storage Bucket CORS 错误
- java - 从 TreeMap 返回相邻键
- python - 将 3D 列表的出现次数与参考列表匹配
- java - 使用 Selenium 选择没有 ID 的下拉值