在 SQL 中使用 STUFF 将多个元素放入一个块中
Using STUFF in order to get multiple elements into one block in SQL
我有三个table。
第一个 Table 被称为客户,其中包含以下虚拟信息:
第二个 table 被称为 Customer_Product,其中包含以下虚拟信息:
第三个 table 被称为产品,其中包含此虚拟信息:
图表如下所示:
我目前有我写的这段代码:
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
这给出了这个输出:
我的问题是如何编写一个查询,而不是它当前给我的内容,它会给我一个看起来像这样的输出:
感谢您的所有帮助!我是 SQL 的新手,所以这里的答案对我来说并不是很突出,当前的代码似乎是我最接近我想要的。我意识到我需要使用 STUFF,但我不知道如何使用。我一直在看这个 post (how to get name from another table with matching id in another table?) 并试图用它为我工作,但运气不佳。
制作脚本你有一个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
我有三个table。
第一个 Table 被称为客户,其中包含以下虚拟信息:
第二个 table 被称为 Customer_Product,其中包含以下虚拟信息:
第三个 table 被称为产品,其中包含此虚拟信息:
图表如下所示:
我目前有我写的这段代码:
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
这给出了这个输出:
我的问题是如何编写一个查询,而不是它当前给我的内容,它会给我一个看起来像这样的输出:
感谢您的所有帮助!我是 SQL 的新手,所以这里的答案对我来说并不是很突出,当前的代码似乎是我最接近我想要的。我意识到我需要使用 STUFF,但我不知道如何使用。我一直在看这个 post (how to get name from another table with matching id in another table?) 并试图用它为我工作,但运气不佳。
制作脚本你有一个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