代码:
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/