Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 New to SQL Server Programming
 FOR XML PATH

Author  Topic 

calvinkwoo3000
Yak Posting Veteran

98 Posts

Posted - 2014-08-07 : 02:27:25
i want to concat data from few column to 2 column.

My database as below:

id name email
1 name1 name1@email.com
1 name2 name2@email.com
2 name21 name21@email.com
2 name22 name22@email.com

Output:
id name email
1 name1,name2 name1@email.com,name2@email.com
2 name21,name22 name21@email.com,name22@email.com

do anyone have any advise?

SwePeso
Patron Saint of Lost Yaks

30421 Posts

Posted - 2014-08-07 : 02:39:09
[code]DECLARE @Sample TABLE
(
id INT NOT NULL,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);

INSERT @Sample
(
id,
name,
email
)
VALUES (1, 'name1', 'name1@email.com'),
(1, 'name2', 'name2@email.com'),
(2, 'name21', 'name21@email.com'),
(2, 'name22', 'name22@email.com');

-- SwePeso
SELECT i.id,
STUFF(n.data.value('.', 'VARCHAR(MAX)'), 1, 1, '') AS name,
STUFF(e.data.value('.', 'VARCHAR(MAX)'), 1, 1, '') AS email
FROM (
SELECT id
FROM @Sample
GROUP BY id
) AS i
CROSS APPLY (
SELECT ',' + x.name
FROM @Sample AS x
WHERE x.id =i.id
ORDER BY x.name
FOR XML PATH(''),
TYPE
) AS n(data)
CROSS APPLY (
SELECT ',' + x.email
FROM @Sample AS x
WHERE x.id =i.id
ORDER BY x.name
FOR XML PATH(''),
TYPE
) AS e(data);[/code]


Microsoft SQL Server MVP, MCT, MCSE, MCSA, MCP, MCITP, MCTS, MCDBA
Go to Top of Page
   

- Advertisement -