Oracle SQL-通过连接行创建字符串,但不超过X个字符数
首先,我尝试将行连接成以逗号分隔的字符串。其次,我不希望字符串超过X个字符。如果要超过,则从下一行开始创建另一个字符串,而不从每行切分字符。我正试图通过oracle SQL实现这一点 我在看Listag,它给了我连接的字符串,但我不知道如何在不拆分每行的值的情况下拆分X个字符,假设我的X=15个字符。我使用下面的代码得到的是 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20Oracle SQL-通过连接行创建字符串,但不超过X个字符数,sql,oracle,Sql,Oracle,首先,我尝试将行连接成以逗号分隔的字符串。其次,我不希望字符串超过X个字符。如果要超过,则从下一行开始创建另一个字符串,而不从每行切分字符。我正试图通过oracle SQL实现这一点 我在看Listag,它给了我连接的字符串,但我不知道如何在不拆分每行的值的情况下拆分X个字符,假设我的X=15个字符。我使用下面的代码得到的是 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 select listagg(x, ',') within group
select listagg(x, ',') within group(order by x)
from (select level x from dual
connect by level <= 20
)
;
我的预期产出是
第1行:1,2,3,4,5,6,7,8 15个字符
第2行:9,10,11,12,13个字符,因为如果我从下一行添加值,将超过15个字符
第3行:14,15,16,17,18 14个字符
第4行:19,20 5个字符
我仍然不确定这能否实现,任何建议或暗示都将不胜感激。我尝试了以下查询,并获得了预期的结果
SELECT
LISTAGG(X, ',') WITHIN GROUP(
ORDER BY
X
) as result
FROM
(
SELECT
X,
SUM(LENGTH(X)) OVER(
ORDER BY
X
) LENGTH_X,
COUNT(1) OVER(
ORDER BY
X
) - 1 AS COMMAS
FROM
(
SELECT
LEVEL X
FROM
DUAL
CONNECT BY
LEVEL <= 20
)
)
GROUP BY
CEIL((LENGTH_X + COMMAS) / 15);
输出:
干杯 我相信解决这个问题的唯一方法是使用递归CTE或分层查询。你用的是什么数据库?我用的是oracle数据库谢谢,这正是我要找的for@tejash-ora-00980有趣的是,当我尝试按255个字符分割时,它失败了,其中每个记录的X长度为9个字符。我认为只需更改拆分字符限制就可以应用相同的查询,但事实并非如此,您能否建议缺少哪些内容。您能否在dbfiddle上提供包含失败结果的示例数据?