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