Sử dụng Coalesce thay thế Cursor: ví dụ như hình bên dưới, ta muốn nối 5 dòng sau thành một chuỗi cách nhau bởi dấu chấm phẩy
Đây là đoạn mã xử lý, ở đây ta sẽ cần database AdventureWorks2008:
DECLARE @DepartmentName VARCHAR(1000) SELECT @DepartmentName = COALESCE(@DepartmentName,'') + Name + ';' FROM HumanResources.Department WHERE (GroupName = 'Executive General and Administration') SELECT @DepartmentName AS DepartmentNames
Để kiểm chứng kỹ thuật trên, tôi tiếp tục tạo ra một kịch bản khác, cũng tương tự như trên:
DECLARE @DepartmentName VARCHAR(1000) = ''
DECLARE @mytable TABLE (NAME VARCHAR(20));
INSERT INTO @mytable
VALUES ('vinh')
,(NULL)
,('minh')
,('linh')
SELECT @DepartmentName = coalesce(@DepartmentName, '') + isnull(NAME+';', '')
FROM @mytable
---SELECT @DepartmentName = @DepartmentName + isnull(NAME+';', '')
--FROM @mytable
SELECT stuff(@DepartmentName, LEN(@DepartmentName), 1, '')
Cách 2: ta dùng function Stuff kết hợp với XML Path
select stuff((select ';'+Name from HumanResources.Department
WHERE (GroupName = 'Executive General and Administration') for XML Path('')), 1, 1, '') as a
Tham khảo:
http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/
Về Stuff function: http://www.sql-server-helper.com/tips/tip-of-the-day.aspx?tkey=3934817c-1a03-4ac9-a0ba-55b2bfbaea0f&tid=72&tkey=uses-of-the-stuff-string-function
http://blog.sqlauthority.com/2013/04/05/sql-server-group-by-rows-and-columns-using-xml-path-efficient-concating-trick/
0 comments:
Post a Comment