sql - 在一行中选择具有多个值的 id
问题描述
我有两张桌子:
社会类型:
身份社会 | 身份类型社会 |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
2 | 1 |
和类型社会
身份类型社会 | 类型名称 |
---|---|
1 | 类型1 |
2 | 类型2 |
3 | 类型3 |
我想要这些结果:
身份社会 | 类型名称 |
---|---|
1 | 类型1,类型2,类型3 |
2 | 类型1 |
IdTypeSociety 是 TypeSociete 的外键
我想将多个值重新组合为一行中的一个 id,如果有人可以帮助我,谢谢。
解决方案
根据您的 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 |
+-----------+-------------------+
推荐阅读
- scala - 仅调用一次方法并应用过滤器将结果保存在scala中的不同变量中
- asp.net - IE11 上的 Fontawesome 5 错误
- android - 电报上的构建命令失败
- typescript - 如何在 Angular 6 的主 div 中获取每个 div?
- node.js - Heroku 中的节点应用程序崩溃 - 错误:找不到模块
- python - 在python中添加带有重音符号的pdf元数据
- jquery - “监听”滑块/文本字段的更改并更新第二个文本字段
- sql - 我通过 ASP.NET Web 应用程序输入的单元格不会在 SQL Server 中求和
- c++ - 为什么 emplace_hint 比在地图中插入慢?
- powershell - 在以指定字母开头的目录中递归列出文件