首页 > 解决方案 > 在一行中选择具有多个值的 id

问题描述

我有两张桌子:

社会类型:

身份社会 身份类型社会
1 1
1 2
1 3
2 1

和类型社会

身份类型社会 类型名称
1 类型1
2 类型2
3 类型3

我想要这些结果:

身份社会 类型名称
1 类型1,类型2,类型3
2 类型1

IdTypeSociety 是 TypeSociete 的外键

我想将多个值重新组合为一行中的一个 id,如果有人可以帮助我,谢谢。

标签: sqlsql-servertsqlconcatenationrow

解决方案


根据您的 SQL Server (17+) 版本,您可以使用STRING_AGG.

这是一个例子:

DECLARE @SocietyType table (
    IdSociety int, IdTypeSociety int
);
INSERT INTO @SocietyType VALUES
    ( 1, 1 ), ( 1, 2 ), ( 1, 3 ), ( 2, 1 );

DECLARE @TypeSociety table (
    IdTypeSociety int, TypeName varchar(10)
);
INSERT INTO @TypeSociety VALUES
    ( 1, 'Type1' ), ( 2, 'Type2' ), ( 3, 'Type3' );

SELECT
    s.IdSociety,
    STRING_AGG ( t.TypeName, ',' ) AS TypeName
FROM @SocietyType AS s
INNER JOIN @TypeSociety AS t
    ON s.IdTypeSociety = t.IdTypeSociety
GROUP BY
    IdSociety;

回报

+-----------+-------------------+
| IdSociety |     TypeName      |
+-----------+-------------------+
|         1 | Type1,Type2,Type3 |
|         2 | Type1             |
+-----------+-------------------+

推荐阅读