在sql中连接多个具有相同名称的行?

时间:2018-05-07 19:20:15

标签: sql sql-server

我似乎无法获得我需要的输出,有人能看到我做错了吗?

输出

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

但是我一直坚持

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

如果留下负面结果,请留下原因

2 个答案:

答案 0 :(得分:4)

问题出在where T.WM = T.WM声明

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

答案 1 :(得分:0)

我会使用CTE

with cte as (
    select *, max(id) over (PARTITION by wm) NewId
    from t
)
SELECT NewId, WM, STUFF((
            SELECT DISTINCT ', ' + Class
            FROM cte
            WHERE C.WM = WM
            FOR XML PATH('')), 1, 2, '')
FROM cte c
group by NewId, WM

检查Demo