一、多行转一行

使用FOR XML函数,将查询结果集以XML形式展现,将多行的结果,展示在同一行。

查询语句:

SELECT ',' + CardCode
FROM OCRD
WHERE CardType = 'C'
FOR XML PATH('')

2025-03-30T02:57:26.png

二、去除转换后字符串的首位分隔符
如果要去除首位多余的分隔符,可以使用 STUFF ,如下所示:

查询语句:

SELECT STUFF((

    SELECT ',' + CardCode  
    FROM OCRD
    WHERE CardType = 'C'
    FOR XML PATH('')
          ), 1, 1, '') CardCodeStr

2025-03-30T02:58:35.png

三、应用场景举例
如: OPOR 表为【采购订单主表】POR1表为【采购订单子表】,两表通过 DocEntry字段关联,现需要显示采购订单清单,一个单据一行,该单据包含的物料编号拼接到一个字段显示:

查询语句:
SELECT T0.DocEntry ,STUFF(( SELECT ',' + U0.ItemCode

                 FROM POR1 U0
                 WHERE U0.DocEntry = T0.DocEntry 
                 FOR XML PATH('')), 1, 1, '') ItemCodeStr

FROM OPOR T0
WHERE T0.DocEntry < 10

2025-03-30T03:01:13.png

发表评论