【问题标题】:Need to Convert query from Oracle to SQL Server and need to convert a ListAgg [duplicate]需要将查询从 Oracle 转换为 SQL Server,并且需要转换 ListAgg [重复]
【发布时间】:2018-07-31 14:58:51
【问题描述】:

我需要转换下面的查询以供 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

【问题讨论】:

    标签: sql oracle sql-server-2012 listagg


    【解决方案1】:

    你可以试试这个。

    ;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
    

    【讨论】:

    • Serkan,这太不可思议了。您甚至没有访问我的数据库就为此提供了解决方案。这绝对有效。难以置信
    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多