Select 一行有多个值的 id

Select id with multiple values in one row

我有两个表:

社会类型:

IdSociety IdTypeSociety
1 1
1 2
1 3
2 1

和TypeSociety

IdTypeSociety TypeName
1 Type1
2 Type2
3 Type3

我想要这些结果:

IdSociety TypeName
1 Type1 , Type2, Type3
2 Type1

IdTypeSociety 到 TypeSociete 的外键

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

根据您的 SQL 服务器版本 (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;

RETURNS

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

对于 SQL Server 版本,在 SQL Server 2017 之前,您可以使用 FOR XML PATH 基础连接。

感谢@Critical Error,table 创建脚本

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 distinct st.IdSociety, 
STUFF(((
SELECT ',' + ts.Typename from @TypeSociety as ts 
INNER JOIN @SocietyType as ist ON ist.IdTypeSociety = ts.IdTypeSociety
where ist.IdSociety  = st.IdSociety
FOR XML PATH(''), TYPE).value('text()[1]','nvarchar(max)')),1,1,'') AS TypeName
FROM @SocietyType AS st

IdSociety TypeName
1 Type1,Type2,Type3
2 Type1