Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Concatenate many rows with same Name in sql?

Tags:

sql

sql-server

I can't seem to get the output I need with this, can anyone see what I am doing wrong?

Output should be

1 | Adam | Math, Science
2 | Tony | Math
3 | Erica | English, History

But I keep resulting with

1 | Adam | Math, Science, English, History
2 | Tony | Math, Science, English, History
3 | Erica | Math, Science, English, History
CREATE TABLE T
(
    ID INT,
    WM VARCHAR(50),
    Class VARCHAR(50),
    Prof VARCHAR(50),
)

INSERT INTO T (ID, WM, Class, Prof)
VALUES
    (NULL, 'Adam', 'Math', 'Sam'),
    (1, 'Adam', 'Science', 'Marc'),
    (2, 'Tony','Math', 'Sam'),
    (3, 'Erica','English', 'P'),
    (3, 'Erica','History', 'P')


SELECT *, STUFF((
            SELECT DISTINCT ', ' + Class
            FROM T
            WHERE T.WM = T.WM
            FOR XML PATH('')), 1, 2, '')
FROM (
    SELECT DISTINCT WM
    FROM T
) T

Please leave a reason why, if leaving negative results

like image 393
Sam Avatar asked Mar 02 '26 00:03

Sam


1 Answers

The issue is in where T.WM = T.WM statement

SELECT *, STUFF((
            SELECT DISTINCT ', ' + Class
            FROM T as T2
            WHERE T.WM = T2.WM
            FOR XML PATH('')), 1, 2, '')
FROM (
    SELECT DISTINCT WM
    FROM T
) T
like image 81
Reza Avatar answered Mar 04 '26 18:03

Reza