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