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
我有两个表:
社会类型:
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 |