【问题标题】:Converting MSSQL 'FOR XML PATH' To Oracle将 MSSQL 'FOR XML PATH' 转换为 Oracle
【发布时间】:2017-12-10 00:17:38
【问题描述】:

我有一个语句来填充我的 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
  • 我建议您展示一些示例数据,更重要的是,展示您想要的输出。
  • @jeff6times7 更新了样本数据和所需的输出

标签: sql sql-server oracle code-conversion for-xml-path


【解决方案1】:

使用LISTAGG:

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

更新

如果您使用 XXAArcSW 表中的值插入到 XXAArcDoc 表中,则类似于:

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

【讨论】:

  • 这给了我一个错误:表 XXAArcSW 的未知字段 [LISTAGG(SWort, ';')]。但是如果我重新排序 ArcDocINr 和 LISTAGG,它就可以工作。你能举个例子把它放到插入语句中吗?
  • @F.Baum 添加了示例。
猜你喜欢
  • 2020-04-06
  • 2013-10-05
  • 1970-01-01
  • 2013-05-09
  • 2014-02-06
  • 2015-10-18
  • 2018-08-09
  • 2019-11-28
  • 2019-09-13
相关资源
最近更新 更多