sql - 在SQL Server中将多行相同id的行合并为一行
问题描述
+----+------+------+------+
| ID |AddID | A | B |
+----+------+------+------+
| 1 | 1 | 1 | 31 |
| 1 | 2 | NULL | 1 |
| 2 | 1 | 38 | 4 |
| 2 | 2 | NULL | NULL |
| 3 | 1 | NULL | NULL |
| 3 | 2 | NULL | NULL |
| 4 | 1 | 1 | NULL |
| 4 | 2 | NULL | 5 |
| 4 | 3 | NULL | 5 |
+----+------+------+------+
我想要这样的桌子:-
+----+-----+------+------+------+-----+------+------+------+----+
| ID |Add1 |Add2 |Add3 | A1 | B1 | A2 | B2 | A3 | B3 |
+----+-----+------+------+------+-----+------+------+------+----+
| 1 | 1 | 2 |NULL |1 | 31 | NULL | 1 |NULL |NULL|
| 2 | 1 | 2 |NULL |38 | 4 | NULL | NULL |NULL |NULL|
| 3 | 1 | 2 |NULL |NULL | NULL| NULL | NULL |NULL |NULL|
| 4 | 1 | 2 | 3 |1 | NULL| NULL | 5 | NULL |5 |
+----+-----+------+------+-----+------+------+------+------+----+
解决方案
您可以使用条件聚合:
select id,
max(case when addid = 1 then addid end) as add1,
max(case when addid = 2 then addid end) as add2,
max(case when addid = 3 then addid end) as add3,
max(case when addid = 1 then a end) as a_1,
max(case when addid = 1 then b end) as b_1,
max(case when addid = 2 then a end) as a_2,
max(case when addid = 2 then b end) as b_2,
max(case when addid = 3 then a end) as a_3,
max(case when addid = 3 then b end) as b_3
from t
group by id;
推荐阅读
- junit - 在 Junit 和 Mockito 中模拟 WCMUsePojo 的 getProperties()
- android - Android Studio 3.2 生成的java
- python - 在以某种格式获取输入并将其以所需格式存储在 python 中时存在错误
- javascript - 为什么删除文本后无法通过jquery设置输入文本的值?
- android - 当我从片段中按下按钮时如何从 MainActivity 启动媒体播放器
- spring-boot - Spring boot rest api Url 未与 sucees 控制台映射
- c# - 如何使用 C# .net 向 Azure 聊天机器人添加主动学习
- c - C 语言:使用 else-if 语法计算线性系统解时的“Else without a previous if”
- python-3.x - Python3-调用什么变量
- h2o - 我们能看到 DriverlessAI 使用的算法列表吗?