Hôm nay có 1 anh developer đến nhờ tôi thực hiện 1 đoạn T-SQL script. Task này khó mà diễn đạt thành lời, nhìn hình thì dễ hiểu hơn, đó là nối dữ liệu từ nhiều dòng thành 1 dòng.
Đây là toàn bộ đoạn script cho toàn bộ quá trình, tạo dữ liệu mẫu ban đầu và cho ra kết quả cuối cùng. Lưu ý là như hình minh họa ở trên, đoạn script sẽ group by theo 2 cột là USERS và ACTIVITY, với những dòng có ACTIVITY là null hoặc rỗng sẽ bị thay thế bằng giá trị 'vinh'.
DECLARE @TABLE TABLE ( ID INT , USERS VARCHAR(10) , ACTIVITY VARCHAR(10) , PAGEURL VARCHAR(10) ) INSERT INTO @TABLE VALUES ( 1, 'Me', 'act1', 'ab' ), ( 2, 'Me', 'act1', 'cd' ), ( 3, 'You', 'act2', 'xy' ), ( 4, 'You', 'act2', 'st' ), ( 5, 'You', 'vinh', 'st' ), ( 6, 'You', '', 'st1' ), ( 7, 'You', NULL, 'st2' ); SELECT * FROM @TABLE; WITH tbl AS ( SELECT USERS , CASE WHEN Activity IS NULL THEN 'vinh' WHEN LTRIM(RTRIM(ACTIVITY)) = '' THEN 'vinh' ELSE ACTIVITY END AS [Activity] , PAGEURL FROM @TABLE ) SELECT T1.USERS , T1.ACTIVITY , STUFF(( SELECT ',' + T2.PAGEURL FROM tbl T2 WHERE T1.USERS = T2.USERS AND T1.ACTIVITY = T2.ACTIVITY FOR XML PATH('') ), 1, 1, '') AS PAGEURLList FROM tbl T1 GROUP BY T1.USERS , T1.ACTIVITYĐể làm được đoạn script trên, tôi đã tham khảo thông tin ở đây:
http://stackoverflow.com/questions/15154644/sql-group-by-to-combine-concat-a-column
Còn đây là 1 ví dụ khác của tác giả Pinal Dave
http://blog.sqlauthority.com/2013/04/05/sql-server-group-by-rows-and-columns-using-xml-path-efficient-concating-trick/
http://sqlknowledgebank.blogspot.com/
=p~ =p~ =p~ =p~ =p~ =p~
ReplyDeleteI learnt a lot from this, thanks so much. Nice clear and explanations too. 검증사이트
ReplyDeleteThis blog is really great. The information here will surely be of some help to me. Thanks ! 검증사이트
ReplyDelete