sql - 如何将具有空值的两行合并为一行替换空值?
问题描述
我的 sql 查询得到以下结果:
ID | sp_firstname | sp_lastname | member_firstname | 成员姓氏 |
---|---|---|---|---|
1 | 无效的 | 无效的 | 约翰 | 史密斯 |
2 | 德娟 | 麦克劳克林 | 无效的 | 无效的 |
2 | 无效的 | 无效的 | 杰克 | 麻雀 |
3 | 约翰 | 沃克 | 无效的 | 无效的 |
3 | 无效的 | 无效的 | 夏洛克 | 福尔摩斯 |
4 | 梅莉 | 杜尔甘 | 无效的 | 无效的 |
4 | 无效的 | 无效的 | 约翰 | 华斯顿 |
5 | 露西 | 斯奈德 | 无效的 | 无效的 |
而我需要实现的是:
ID | sp_firstname | sp_lastname | member_firstname | 成员姓氏 |
---|---|---|---|---|
1 | 无效的 | 无效的 | 约翰 | 史密斯 |
2 | 德娟 | 麦克劳克林 | 杰克 | 麻雀 |
3 | 约翰 | 沃克 | 夏洛克 | 福尔摩斯 |
4 | 梅莉 | 杜尔甘 | 约翰 | 华斯顿 |
5 | 露西 | 斯奈德 | 无效的 | 无效的 |
基本上,我需要以某种方式合并具有null
交叉的行对。
在查看了 SO 答案后,我只能在NULL
需要用数字替换值时找到这个问题的变体,在这种情况下,人们使用max
了与group by
.
但是,我的表中有几个连接,我的NULL
值需要用字符串而不是数字替换,所以max
在这里不会真正起作用(正如我所想的那样)。
这是我的sql代码:
select
meeting.id,
(case when salesprofile.userid = "user".id then "user".firstname end) as sp_firstname,
(case when salesprofile.userid = "user".id then "user".lastname end) as sp_lastname,
(case when business.userid = "user".id then "user".firstname end) as member_firstname,
(case when business.userid = "user".id then "user".lastname end) as member_lastname
from
meeting
join project on project.id = meeting.projectid
left join business on business.id = project.businessid
left join salesprofile on salesprofile.id = meeting.salesprofileid
join "user" on "user".id = business.userid or "user".id = salesprofile.userid
group by
"user".id,
business.userid,
meeting.id,
salesprofile.userid;
这些名字和姓氏来自完全相同的user
表,但它们是基于在同一个meeting
表中发现的不同关系而获取的。
基本上,一个meeting
有两个user
s:member
和sp
. 我需要一种方法来与它member
和sp
用户一起开会。
如何修改我的 sql 查询,以便它将这些带有横向null
s 的行对合并到一个有数据但没有null
s 的行中?
解决方案
您可以使用外部查询包装您的结果,以使用max
和分组来聚合列id
select id, Max(sp_firstname) as sp_firstname, Max(sp_lastname) as sp_lastname...
from (
<inner query>
)x
group by id
推荐阅读
- android - 如何在使用导航组件导航时保存片段状态
- python - 有没有办法将 R 包中的数据帧保存为 hdf5 以加载到 python 中?
- mysql - 将 ORDER BY 添加到 LEFT OUTER JOIN
- html - 如何避免将页面元素隐藏在固定元素后面
- c# - SSIS 包尝试使用错误的 c# 版本运行
- r - 由强制 _ 平均和 SD _ 百分比引起的 NA
- node.js - 是否可以从 Javascript 运行 npm 脚本
- java - 如何避免复制粘贴 hasRole 或 hasPermission 注释?
- c++ - 你如何“缓冲”UNIX 信号
- blockchain - 基本 Quorum 网络设计