sql - 在 Sql 存储过程中使用 XML PATH

标签 sql sql-server stored-procedures

我正在尝试将焊工姓名串联起来。 这就是我所拥有的:

SELECT  jsd1.JuntaSoldaduraID, 
        REPLACE(RTRIM((SELECT s1.Nombre + ' ' + s1.ApPaterno + ' ' + 
            s1.ApMaterno + '' + CAST('' AS VARCHAR(MAX)) + ' ' 
FROM JuntaSoldaduraDetalle jsd
INNER JOIN  Soldador s1 on s1.SoldadorID = jsd.SoldadorID
WHERE (jsd1.JuntaSoldaduraID = jsd.JuntaSoldaduraID) 
          and (jsd.TecnicaSoldadorID = 2)
FOR XML PATH (''))),' ',', ') AS NombreSoldador
FROM JuntaSoldaduraDetalle jsd1
INNER JOIN Soldador s
ON s.SoldadorID = jsd1.SoldadorID
GROUP BY jsd1.JuntaSoldaduraID

我能够获得我想要的信息,但有一点问题。 我想要的是“约翰·史密斯,大卫·罗杰斯,彼得·西蒙斯”等。换句话说,全名用逗号分隔。 但我收到“约翰、史密斯、大卫、罗杰斯、彼得、西蒙斯”..

感谢任何帮助。

提前致谢。

最佳答案

您的 REPLACE 将用逗号替换所有空格。相反,请将逗号作为查询的一部分并使用 STUFF删除第一次出现的逗号。您可能还想合并 COALESCE 的使用如果任何名称字段为 NULL。

SELECT  jsd1.JuntaSoldaduraID, 
        STUFF((SELECT ', ' + COALESCE(s1.Nombre + ' ','') 
                           + COALESCE(s1.ApPaterno + ' ','') 
                           + COALESCE(s1.ApMaterno,'')
                   FROM JuntaSoldaduraDetalle jsd
                       INNER JOIN  Soldador s1 
                           on s1.SoldadorID = jsd.SoldadorID
                   WHERE jsd1.JuntaSoldaduraID = jsd.JuntaSoldaduraID 
                       and jsd.TecnicaSoldadorID = 2
                   FOR XML PATH ('')),1,2,'') AS NombreSoldador
    FROM JuntaSoldaduraDetalle jsd1
        INNER JOIN Soldador s
            ON s.SoldadorID = jsd1.SoldadorID
    GROUP BY jsd1.JuntaSoldaduraID

关于sql - 在 Sql 存储过程中使用 XML PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318578/

相关文章:

mysql - 从MySQL数据中获取最后的mod_date

SQL Server ORDER BY [聚合] DESC/ASC

mysql - SQL 过程错误 : Unknown data type.(位置 211 处的 "("附近)

sql-server - 上次执行存储过程的时间

sql - 无法使用 R 脚本使用 sp_execute_external_script 动态传递表名称

c# - 调用存储过程

sql - 将数据导入mysql的最佳方法

mysql - 将用户信息与消息表连接起来

sql - Oracle SQL GROUP BY "not a GROUP BY expression"帮助

sql-server - sql错误处理和输出