Reputation: 1219
Is there any way to use GROUP BY in T-SQL but get "join-list" as a result instead of agregate function? For example:
-- this table
CREATE TABLE tblDATA(
Name int,
GroupName nvarchar(50)
)
-- with this data
INSERT INTO tblDATA VALUES('Peter', 'A')
INSERT INTO tblDATA VALUES('Peter', 'B')
INSERT INTO tblDATA VALUES('Jane', 'A')
INSERT INTO tblDATA VALUES('Jane', 'C')
INSERT INTO tblDATA VALUES('Jane', 'D')
INSERT INTO tblDATA VALUES('Dave', 'B')
INSERT INTO tblDATA VALUES('Susan', 'E')
INSERT INTO tblDATA VALUES('Susan', 'F')
-- and get this query result in the two collumns (I don't care about delimiter) :
Peter A, B
Jane A, C, D
Dave B
Susan E, F
Upvotes: 1
Views: 1632
Reputation: 69564
Test Data
CREATE TABLE #tblDATA(
Name VARCHAR(20), --<-- Your Name column is defined as INT Data Type
GroupName nvarchar(50)
)
-- with this data
INSERT INTO #tblDATA VALUES('Peter', 'A')
INSERT INTO #tblDATA VALUES('Peter', 'B')
INSERT INTO #tblDATA VALUES('Jane', 'A')
INSERT INTO #tblDATA VALUES('Jane', 'C')
INSERT INTO #tblDATA VALUES('Jane', 'D')
INSERT INTO #tblDATA VALUES('Dave', 'B')
INSERT INTO #tblDATA VALUES('Susan', 'E')
INSERT INTO #tblDATA VALUES('Susan', 'F')
Query
SELECT DISTINCT Name, STUFF(List.Groups, 1 ,2 , '') AS Groups
FROM #tblDATA t
CROSS APPLY (
SELECT ', ' + GroupName [text()]
FROM #tblDATA
WHERE Name = t.Name
FOR XML PATH('')
)List(Groups)
Result Set
╔═══════╦═════════╗
║ Name ║ Groups ║
╠═══════╬═════════╣
║ Dave ║ B ║
║ Jane ║ A, C, D ║
║ Peter ║ A, B ║
║ Susan ║ E, F ║
╚═══════╩═════════╝
Upvotes: 2