查询将过去 11 个会计年度作为行返回。我可以使用 LISTAGG() 将其转换为逗号分隔的列表吗?
Posted
技术标签:
【中文标题】查询将过去 11 个会计年度作为行返回。我可以使用 LISTAGG() 将其转换为逗号分隔的列表吗?【英文标题】:Query returns last 11 fiscal years as rows. Can I get use LISTAGG() to convert it to a comma separated list? 【发布时间】:2018-10-18 21:03:45 【问题描述】:我编写了这个查询来返回最近 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;
块)?
谢谢!
【问题讨论】:
【参考方案1】:我会计算子查询中的值,然后使用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
【讨论】:
谢谢,穿刺者;那行得通!我不知道WITH
语法。【参考方案2】:
试试这个查询
SELECT LISTAGG(Y, ',') WITHIN GROUP (ORDER BY Y DESC) AS LIS FROM
(SELECT TO_NUMBER(EXTRACT(YEAR FROM ADD_MONTHS(SYSDATE, +3))) - LEVEL +
1 AS Y FROM DUAL CONNECT BY LEVEL <= 11);
【讨论】:
以上是关于查询将过去 11 个会计年度作为行返回。我可以使用 LISTAGG() 将其转换为逗号分隔的列表吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中使用 Pandas 创建会计年度列?