23 thg 10, 2015

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

Ví dụ bạn có bảng:
ProductID CustomerName
---------- -------------
1          Tuấn
1          Minh
1          Linh
2          Ngọc
2          Hiền
Bạn muốn kết quả ra như sau:
ProductID CustomerName
---------- -------------
1          Tuấn, Minh, Linh
2          Ngọc, Hiền
Bạn có thể dùng câu lệnh này:

SELECT DISTINCT C2.ProductID, 
    SUBSTRING(
        (
            SELECT ','+C1.CustomerName  AS [TEXT()]
            FROM dbo.Customer C1
            WHERE C1.ProductID = C2.ProductID
            ORDER BY C1.ProductID
            FOR XML PATH ('')
        ), 2, 1000) CustomerList
FROM dbo.Customer C2
Trường hợp bạn không cần group by ProductID mà chỉ cần một danh sách khách hàng nối với nhau, bạn có thể dùng câu lệnh đơn giản hơn sau:


DECLARE @NAMES NVARCHAR(4000) 
SELECT @NAMES = COALESCE(@NAMES + ', ', '') + CustomerName 
FROM dbo.Customer
SELECT @NAMES

xem thêm trang này
tham khảo Địa chỉ này
Trường hợp bạn muốn trường CustomerName là trường numeric cách viêt sẽ như sau:
DECLARE @NAMES NVARCHAR(4000)  
SELECT @NAMES = COALESCE(@NAMES + ', ', '') + CONVERT(NVARCHAR,CustomerName) 
FROM dbo.Customer
SELECT @NAMES

Ghép Nối Nhiều Bản Ghi Vào Một Dòng Rating: 4.5 Diposkan Oleh: http://pdunoteit.blogspot.com/