在SQL 2014 / SQL 2016中连接表的多行

问题描述 投票:0回答:1

我有一张这样的桌子:

 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'实现预期的输出?

sql-server tsql string-aggregation
1个回答
0
投票

尝试一下:

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];
© www.soinside.com 2019 - 2024. All rights reserved.