gpt4 book ai didi

sql - 将 MSSQL 'FOR XML PATH' 转换为 Oracle

转载 作者:行者123 更新时间:2023-12-04 23:47:22 24 4
gpt4 key购买 nike

我有一个语句来填充我的 MSSQL 数据库上的一个表。它将一些值连接在一起,用分号分隔。

INSERT INTO XXAArcDocSWSB (ArcDocINr, SWorte)
SELECT A.ArcDocINr, B.SWorte FROM XXAArcDoc A
LEFT JOIN (
SELECT DISTINCT T2.ArcDocINr,
SUBSTRING(
(
SELECT ';' + T1.SWort AS [text()]
FROM (SELECT D.ArcDocINr, SW.SWort FROM XXAArcDoc D, XXAArcSW SW WHERE D.ArcDocINr = SW.ArcDocINr) T1
WHERE T1.ArcDocINr = T2.ArcDocINr
For XML PATH ('')
), 2, 255) [SWorte]
FROM (SELECT D.ArcDocINr, SW.SWort FROM XXAArcDoc D, XXAArcSW SW WHERE D.ArcDocINr = SW.ArcDocINr) T2
) B ON A.ArcDocINr = B.ArcDocINr

我没有足够的知识将其转换为 Oracle。它应该给我与 MSSQL 相同的输出。
有人能帮我吗?

编辑:

以下是一些示例数据:

XXAArcDoc:
ArcDocINr | ...
----------|----------
1 |
2 |
3 |
. |
. |
. |

XXAArcSW:
ArcSWINr | ArcDocINr | SWort
---------|-----------|---------
6 | 1 | Müller
7 | 1 | 100
8 | 2 | 111111
9 | 2 | 13579
10 | 2 | 002
11 | 3 | TM-AH

这是我想要的输出:
ArcDocINr | SWorte
----------|---------
1 | Müller;100
2 | 111111;13579;002
3 | TM-AH

最佳答案

使用 LISTAGG :

SELECT ArcDocINr,
LISTAGG(
SWort,
';'
) WITHIN GROUP ( ORDER BY ArcSWINr ) AS SWorte
FROM XXAArcSW
GROUP BY ArcDocINr;

更新 :

如果您正在插入 XXAArcDoc使用来自 XXAArcSW 的值的表表然后是这样的:
INSERT INTO XXAArcDoc ( ArcDocINr, SWorte )
SELECT ArcDocINr,
LISTAGG( SWort, ';' ) WITHIN GROUP ( ORDER BY ArcSWINr )
FROM XXAArcSW
GROUP BY ArcDocINr

关于sql - 将 MSSQL 'FOR XML PATH' 转换为 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44941304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com