@manhnguyenv

Welcome to my blog!

SQL STUFF Ghép Nối Nhiều Bản Ghi Vào Một Dòng

June 1, 2017 17:50

STUFF

Trả về là chuỗi mới sau khi đã hủy bỏ một số ký tự hiện có và thêm vào một chuỗi con khác tại vị trí vừa hủy bỏ

Cú pháp: STUFF ('string',vị trí, chiều dài, chuỗi con)

Vị trí: là một số nguyên chỉ định vị trí bắt đầu hủy bỏ các ký tự bên trong chuỗi nguồn.
Chiều dài: là một số nguyên chỉ định bao nhiêu ký tự sẽ bị hủy bỏ trong chuỗi nguồn đếm từ bên trái vị trí chỉ định.

 

SELECT STUFF ('123456789', 4, 3, 'ABDCEF') -- Value = '123ABCDEF789'

 

FOR XML PATH

DECLARE @Cust AS TABLE(
ProductID INT,
CustomerName NVARCHAR(50)
)

INSERT INTO @Cust (ProductID, CustomerName)
SELECT 1, N'Tuấn' UNION ALL
SELECT 1,N'Minh' UNION ALL
SELECT 1,N'Linh' UNION ALL
SELECT 2,N'Ngọc' UNION ALL
SELECT 2,N'Hiền'

 

Lấy hết tên trả về trên một dòng group by ProductID

SELECT DISTINCT C2.ProductID,
SUBSTRING(
(
SELECT ',' + C1.CustomerName
FROM @Cust C1
WHERE C1.ProductID = C2.ProductID
ORDER BY C1.ProductID
FOR XML PATH ('')
), 2, 1000) CustomerList
FROM @Cust C2

 

Lấy hết tên trả về trên một dòng group by ProductID (Cách 2)

SELECT ProductID ,
STUFF(( SELECT ', ' + CustomerName
FROM @Cust C1
WHERE C1.ProductID = C2.ProductID
FOR
XML PATH('')
), 1, 1, '') AS CustomerList
FROM @Cust C2
GROUP BY ProductID;

 

Lấy hết tên trả về trên một dòng

DECLARE @NAMES NVARCHAR(4000)
SELECT @NAMES = COALESCE(@NAMES + ', ', '') + CustomerName
FROM @Cust
SELECT @NAMES

 

Tham khảo

https://docs.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql

https://stackoverflow.com/questions/31211506/how-stuff-and-for-xml-path-work-in-sql-server

http://www.sql-server-helper.com/tips/tip-of-the-day.aspx?tkey=3934817c-1a03-4ac9-a0ba-55b2bfbaea0f&tkw=uses-of-the-stuff-string-function

Categories