sql - 需要将查询从 Oracle 转换为 SQL Server,并且需要转换 ListAgg
问题描述
我需要转换下面的查询以供 SQL Server 使用。任何想法如何转换此 ListAgg 查询以供 SQL Server 使用?
select A.CONTRACT_ID,A.CONTRACT_ref_num,A.BA_INT_ID,LISTAGG(B.WHOLE_NAME,' | ') WITHIN GROUP (ORDER BY A.CONTRACT_ID DESC) Distributors
into #Distributors from MN_BA_INT A, MN_BA_INT_WHOLE B, MN_STRUCTURED_DOC C
where
A.CONTRACT_ID=C.struct_doc_id
AND A.BA_INT_ID=B.BA_INT_ID
group by A.CONTRACT_ID,A.CONTRACT_ref_num,A.BA_INT_ID
解决方案
你可以试试这个。
;WITH CTE AS (
select
A.CONTRACT_ID,
A.CONTRACT_ref_num,
A.BA_INT_ID,
B.WHOLE_NAME
from
MN_BA_INT A
INNER JOIN MN_BA_INT_WHOLE B ON A.BA_INT_ID=B.BA_INT_ID
INNER JOIN MN_STRUCTURED_DOC C ON A.CONTRACT_ID=C.struct_doc_id
)
SELECT CONTRACT_ID, CONTRACT_ref_num, BA_INT_ID,
STUFF( ( SELECT ' | ' + WHOLE_NAME
FROM CTE T2
WHERE T1.CONTRACT_ID = T2.CONTRACT_ID
AND T1.CONTRACT_ref_num = T2.CONTRACT_ref_num
AND T1.BA_INT_ID = T2.BA_INT_ID
ORDER BY CONTRACT_ID DESC FOR XML PATH('') ) ,1,3,'') AS Distributors FROM CTE T1
group by
CONTRACT_ID, CONTRACT_ref_num, BA_INT_ID
推荐阅读
- node.js - 如何在 nodejs 中从 goDaddy 安装 SSL 证书?
- php - 在同一文件夹中找不到可用文件
- three.js - three.js 是否计算面列表中未引用的顶点?
- javascript - 提取传单中标记的属性,onClick 事件
- javascript - 如何迁移cookie域并保留值
- python - 有没有办法只标记一个要运行的测试?
- laravel - Laravel Eloquent Pivot Tables 按对象集合上的数据透视列过滤
- angular - Angular 6 + RxJS 6.0:如何将新元素推送到 Observable 包含的数组中
- javascript - 使用 React 将文件上传到 Firebase
- java - 如何在多个活动中使用共享偏好?