sql - 选择具有相同 ID 的行,折叠具有空/非空值的行
问题描述
我觉得一看到这个我就会打自己,但这里是:
数据:
CREATE TABLE testdata (
id int,
email varchar(25),
street nvarchar(50),
town nvarchar(15),
zip nvarchar(5)
source nvarchar(15))
INSERT INTO testdata (
id,
email,
street,
town,
zip,
source
)
VALUES
(
1,
'myemail@email.com',
null,
'happy',
null
),
(
1,
'myemail@gmail.com',
null,
'happy',
'19400'
);
这产生:
-------------------------------------------------------------
|id |email |street |town |zip |
|1 |myemail@email.com |happy place |happy |(null) |
|1 |myemail@gmail.com |(null) |happy |19400 |
我想要达到的是
|id |email |street |town |zip |
|1 |myemail@email.com |happy place |happy |19400 |
基本上我想折叠所有行并在 ID 相同的情况下抓取任何不为空的内容。如果它们都为空,则获取空值。我尝试通过合并进行自加入,但是没有用。我觉得好像我很接近但是有一个我可以使用的功能可以让这更容易吗?
注意事项:只能有两行具有相同的 ID(不确定这是否使其更难或更容易)。如果两行都填充了信息,我想要第一行。
解决方案
表中没有“第一”行之类的东西,除非您有一个指定排序的列。您的表没有这样的列。
所以,你能做的最好的就是聚合:
select email, max(street) as street, max(town) as town, max(zip) as zip
from testdata
group by email;
推荐阅读
- makefile - 如何检测包含链中的第一个 Makefile?
- java - @Scheduled 方法未在特定类中运行
- typescript - 如何扩展另一个模块声明文件?
- database-migration - migrating from [Trac 1.0] to [Trac 1.4] TracError: OperationalError: no such column: description
- ios - 如何使用 CGAffineTransform 使两个视图具有相同的宽度和高度
- python - pymc3中的转换率
- javascript - 我可以在一个函数中堆叠不同的 javascript 方法吗?
- python - 3D 曲面图:如何反转轴
- android - Android Studio“底部导航活动”模板在顶部留下空白区域
- javascript - 在 Vue 中观察异步外部 DOM 变化