我有一张这样的桌子:
id | movie | actorid | actor | roleid | rolename
1 | mi3 | 121 | tom | 6 | actor
2 | avenger | 104 | scarlett| 4 | actress
2 | avenger | 3 | russo | 2 | action director
我期望输出如:
id | movie | actorid | actor | roleid | rolename
1 | mi3 | 121 | tom | 6 | actor
2 | avenger | 104,3 | scarlett,russo | 4,2 | actress, action director
对于最新的sql版本,我看到了'STRING_AGG'函数来连接列或行数据。但是如何使用SQL Server 2014'STUFF'实现预期的输出?
尝试一下:
DECLARE @DataSource TABLE
(
[id] INT
,[movie] VARCHAR(12)
,[actiorid] INT
,[actor] VARCHAR(12)
,[roleid] INT
,[rolename] VARCHAR(36)
);
INSERT INTO @DataSource ([id], [movie], [actiorid], [actor], [roleid], [rolename])
VALUES (1, 'mi3 ', 121, 'tom ', 6, 'actor')
,(2, 'avenger', 104, 'scarlett', 4, 'actress')
,(2, 'avenger', 3, 'russo', 2, 'action director');
SELECT [id]
,[movie]
,STRING_AGG([actiorid], ',')
,STRING_AGG([actor], ',')
,STRING_AGG([roleid], ',')
,STRING_AGG([rolename], ',')
FROM @DataSource
GROUP BY [id]
,[movie];