我似乎无法获得我需要的输出,有人能看到我做错了吗?
输出
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
如果留下负面结果,请留下原因
答案 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