sql - 如何在 STUFF 函数(XML 路径)中包含字符串文本?

标签 sql sql-server sql-server-2008

代码:

ISNULL(LTRIM(STUFF( (SELECT ', ' + PL.Pipe_Product
                            FROM Reporting.PipelineInformation PL
                            WHERE PL.Project_ID = TI.Project_ID 
                            FOR XML PATH('')), 1, 1, '')),'___________') AS Pipe_Product

我该怎么做?

最佳答案

另一种方法可以是在子查询中添加 ROW_NUMBER 来决定是否应插入逗号或 and 。这应该会更快,因为您不需要针对同一个 PipelineInformation 表进行单独的查询,这两个表都是相关的子查询。

DECLARE @PL TABLE (Pipe_Product VARCHAR(50), Project_ID INT)
INSERT @PL VALUES ('gas', 1),('oil', 1),('orange juice', 1), ('milk', 2), ('honey', 2)


SELECT
    TI.Project_ID,
    SUBSTRING((
        SELECT
            CASE WHEN RowNum = 1 THEN ' and ' ELSE ', ' END + T.Pipe_Product AS [text()]
        FROM (
            SELECT 
                Pipe_Product,
                Project_ID,
                ROW_NUMBER() OVER (ORDER BY Pipe_Product DESC) AS RowNum
            FROM @PL
            WHERE Project_ID = TI.Project_ID
            ) T
        ORDER BY RowNum DESC
        FOR XML PATH('')
    ), 3, 4000) AS [Pipe_Product]
FROM (SELECT 1 UNION ALL SELECT 2) AS TI (Project_ID)

上面的示例数据输出:

Project_ID  Pipe_Product
----------- -----------------------------
1           gas, oil and orange juice
2           honey and milk

关于sql - 如何在 STUFF 函数(XML 路径)中包含字符串文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31276431/

相关文章:

sql - 如何在我的子选择中删除相关子查询(由于 presto 限制)

sql - 如何在浏览器中启动SQL Server服务

c# - 多列的sql合并语句

SQL SELECT 顶行和聚合计数

sql-server-2008 - SQL Server,获取给定年份的所有周数?

sql - 如何使用 Microsoft SQL Server Management Studio 为数据库中的所有触发器生成脚本

javascript - 显示 SQLite 表中的总行数

sql - mysql迁移工具,源参数字符串 | sql server 的连接字符串

sql-server - Powershell x86 : Could not load file or assembly Microsoft. SqlServer.BatchParser

sql-server - SQL 2005 实例不适用于 DNS