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