0

I have this table, I need to concatenate the same values from serveral columns in one row.

RowId ServerName MyApplicationName UserName StartTime LastTime UsersCount 1 Prod MyProd User1 2021/03/09 2021/03/09 10 2 DEV1 MyApp1 User1 2021/03/12 2021/03/13 3 3 DEV1 MyApp1 User1 2021/03/14 2021/03/15 3 4 DEV1 MyApp1 User1 2021/03/16 2021/03/17 4 5 DEV1 MyApp1 User1 2021/03/18 2021/03/19 5 

I need following result:

RowId ServerName MyApplicationName UserName StartTime LastTime UsersCount 1 Prod MyProd User1 2021/03/09 2021/03/09 10 2 DEV1 MyApp1 User1 2021/03/12 2021/03/19 15 

What I tried:

SELECT RowId, STUFF( (SELECT ',' + ServerName FROM tbl t1 WHERE t2.ServerName = t1.ServerName FOR XML PATH('')) , 1, 1, '') ) As ServerName, STUFF( (SELECT ',' + MyApplicationName FROM tbl t1 WHERE t2.MyApplicationName = t1.MyApplicationName FOR XML PATH('')) , 1, 1, '') ) As MyApplicationName, STUFF( (SELECT ',' + UserName FROM tbl t1 WHERE t2.UserName = t1.UserName FOR XML PATH('')) , 1, 1, '') ) As UserName, MIN(StartTime) AS StartTime, MAX(LastTime) AS LastTime, SUM(UserCount) AS UserCount GROUP BY ApplicationName 

But it doesn't works. How do it correctly and what I did wrong?

2
  • 2
    If you are seriously using SQL Server 2008 its time to upgrade! Commented Mar 19, 2021 at 3:38
  • @DaleK I know, but we have some 2008 servers) You know how difficult to upgrade old servers) Commented Mar 19, 2021 at 3:40

1 Answer 1

1

This is just a min, max, sum exercise, is it not,

--DROP TABLE t CREATE TABLE t ( ServerName varchar(100), myapplicationname varchar(100), username varchar(100), starttime varchar(100), endtime varchar(100), usercount int) INSERT INTO t ( ServerName, myapplicationname, username, starttime, endtime, usercount) VALUES ('Prod','myprod','user1','2021/03/09','2021/03/09', 10), ('dev1','MyApp1','user1','2021/03/12','2021/03/13', 3), ('dev1','MyApp1','user1','2021/03/14','2021/03/15', 3), ('dev1','MyApp1','user1','2021/03/16','2021/03/17', 5) select * from t select ServerName, myapplicationname, username, min(starttime), max(endtime), sum(usercount) from t group by ServerName, myapplicationname, username 

Result:

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.