[英]T-SQL: Concat multiple rows value in into one value
我使用CTE做一個例子,這是
with CTE as
(
Select 'John' as Name, 'Book' as Product
Union all
Select 'John' as Name, 'Pen' as Product
Union all
Select 'John' as Name, 'Phone' as Product
Union all
Select 'Kevin' as Name, 'Book' as Product
Union all
Select 'Kevin' as Name, 'Watch' as Product
)
SELECT Name, Product=STUFF(
(SELECT ';' + Product FROM CTE t2
WHERE t1.Name = t2.Name
FOR XML PATH ('')) , 1, 1 , '')
FROM CTE t1
GROUP BY Name
如果你先
select * from CTE
然后您將看到原始數據的樣子
這是我在Internet上找到的一種方法,但首先我不了解它的工作原理,如果有人可以解釋我的工作原理,我將不勝感激。
謝謝!
首先,這是完成嘗試工作的最佳方法。 特別是與其他方法相比,它非常高效。 讓我解釋一下它是如何工作的。
--So first your group by is grouping by name.
--It's really just getting the DISTINCT values of name
--You could actually use a distinct name instead of the group by clause
SELECT Name,
Product =
(
--This combines your semicolon to each value of product
SELECT ';' + Product
FROM CTE t2
--This connects this subquery to the outer query
WHERE t1.Name = t2.Name
--I don't know how this works exactly. It obviously uses some kind of XML parsing, but it concats all your rows together into one
FOR XML PATH ('')
)
FROM CTE t1
GROUP BY Name
結果:
Name Product
----- ----------------
John ;Book;Pen;Phone
Kevin ;Book;Watch
您會注意到我擺脫了STUFF(),向您展示了它所做的只是刪除第一個分號。 如果需要,可以改用SUBSTRING()。
希望這可以幫助。 需要幫助請叫我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.