使用STUFF以便在SQL中将多个元素放入一个块中

时间:2017-06-08 18:26:40

标签: sql sql-server string-aggregation

我有三张桌子。

1st Table被称为Customer,其中包含以下虚拟信息:

enter image description here

第二个表名为Customer_Product,其中包含以下虚拟信息:

enter image description here

第3个表名为Products,其中包含以下虚拟信息:

enter image description here

图表看起来像这样:

enter image description here

我目前有这样的代码:

SELECT 
    A.Customer_Name [Customer Name], 
    (SELECT CASE
        WHEN A.Customer_ID = A.Customer_Parent_ID
            THEN 'Is the Parent'
        ELSE(
        SELECT F.Customer_Name 
        FROM dbo.Customers F 
        Where F.Customer_ID = A.Customer_Parent_ID)
     END)  [Customer Parent's Name],
    C.Product_Name [Product They Own]
FROM dbo.Customers A 
JOIN Customer_Product B ON A.Customer_ID = B.Customer_ID
JOIN Products C ON C.Product_ID = B.Product_ID

这给出了这个输出:

enter image description here

我的问题是如何编写一个查询,而不是它当前给我的查询,它会给我一个看起来像这样的输出:

enter image description here

感谢您的帮助!我是SQL的新手,所以这里的答案并不能让我真正脱颖而出,目前的代码是我能够达到我想要的最接近的代码。我意识到我需要使用STUFF,但我不明白怎么做。我一直在看这篇文章(how to get name from another table with matching id in another table?)并尝试用它为我工作,但运气不佳。

1 个答案:

答案 0 :(得分:1)

使脚本具有CTE。然后,一旦将其定义为CTE,就可以运行它。

SELECT Customer_name,
      STUFF((
        SELECT ', ' + [Product They Own] 
        FROM CTE
        WHERE Customer_name= final.Customer_name
FOR XML PATH('')),1,1,'') AS [Products They Own] 
FROM CTE final
GROUP BY Customer_name