sql - 如果使用 SQL 存在数据,如何将“计划”替换为“实际”
问题描述
我有一张看起来像这样的桌子。
它看起来像什么:
日期 | 电影 | 地点 | 类型 | 意见 |
---|---|---|---|---|
2020 年 11 月 19 日 | 超人 | 纽约 | 计划 | |
2020 年 11 月 26 日 | 超人 | 纽约 | 计划 | 35 |
2020 年 12 月 3 日 | 超人 | 纽约 | 计划 | 20 |
2020 年 12 月 10 日 | 超人 | 纽约 | 计划 | 20 |
2020 年 12 月 10 日 | 超人 | 纽约 | 实际数据 | 45 |
2020 年 12 月 17 日 | 超人 | 纽约 | 计划 | 30 |
2020 年 12 月 17 日 | 超人 | 纽约 | 实际数据 | 53 |
2020 年 12 月 24 日 | 超人 | 纽约 | 计划 | 40 |
2020 年 12 月 24 日 | 超人 | 纽约 | 实际数据 | 55 |
2020 年 12 月 31 日 | 超人 | 纽约 | 计划 | 40 |
2020 年 12 月 31 日 | 超人 | 纽约 | 实际数据 | 64 |
2021 年 1 月 7 日 | 超人 | 纽约 | 计划 | 70 |
2021 年 1 月 7 日 | 超人 | 纽约 | 实际数据 | 75 |
2021 年 1 月 14 日 | 超人 | 纽约 | 计划 | 30 |
2021 年 1 月 14 日 | 超人 | 纽约 | 实际数据 | 54 |
2021 年 1 月 21 日 | 超人 | 纽约 | 计划 | 10 |
2021 年 1 月 21 日 | 超人 | 纽约 | 实际数据 | 15 |
2021 年 1 月 28 日 | 超人 | 纽约 | 计划 | 10 |
2021 年 1 月 28 日 | 超人 | 纽约 | 实际数据 | |
2021 年 2 月 4 日 | 超人 | 纽约 | 计划 | 14 |
如果实际值不存在,我只想包括计划。我应该尝试什么?实际值行可能存在但带有 0。它应该仅在该值大于 0 时显示实际值
预期的:
日期 | 电影 | 地点 | 类型 | 意见 |
---|---|---|---|---|
2020 年 11 月 19 日 | 超人 | 纽约 | 计划 | |
2020 年 11 月 26 日 | 超人 | 纽约 | 计划 | 35 |
2020 年 12 月 3 日 | 超人 | 纽约 | 计划 | 20 |
2020 年 12 月 10 日 | 超人 | 纽约 | 实际数据 | 45 |
2020 年 12 月 17 日 | 超人 | 纽约 | 实际数据 | 53 |
2020 年 12 月 24 日 | 超人 | 纽约 | 实际数据 | 55 |
2020 年 12 月 31 日 | 超人 | 纽约 | 实际数据 | 64 |
2021 年 1 月 7 日 | 超人 | 纽约 | 实际数据 | 75 |
2021 年 1 月 14 日 | 超人 | 纽约 | 实际数据 | 54 |
2021 年 1 月 21 日 | 超人 | 纽约 | 实际数据 | 15 |
2021 年 1 月 28 日 | 超人 | 纽约 | 计划 | 10 |
2021 年 2 月 4 日 | 超人 | 纽约 | 计划 | 14 |
解决方案
一种方法是not exists
:
select t.*
from t
where t.type = 'Actuals' or
not exists (select 1
from t t2
where t2.date = t.date and
t2.movie = t.movie and
t2.location = t.location and
t2.type = 'Actuals'
);
一个有趣的方法是使用聚合:
select date, movie, location,
coalesce( max(case when type = 'Actuals' then type end),
max(type)
) as type,
coalesce( max(case when type = 'Actuals' then views end),
max(views)
) as views
from t
group by date, movie, location;
但最常见的方法是使用qualify
窗口函数:
select t.*
from t
qualify row_number() over (partition by date, movie, location
order by type
) = 1;
注意:排序是按字母顺序排列的'Actuals' < 'Planned'
。
推荐阅读
- android - Nativescript:tns 设备不显示模拟器。亚行显示设备
- svg - 外部 sprite.svg shadow-root 空图标未显示
- flutter - ScrollController 不滚动到内容的底部
- c# - 导航视图可以与导航到的页面进行通信吗?
- asp.net-core - 如何在 Web API 中同时支持 json 和 urlencoded 内容类型
- database - 将 OSM 数据迁移到 PostGreSQL 时如何使用 hstore 扩展类型?
- r - 如何使用 R igraph 访问给定最短路径中的已访问顶点
- javascript - 通过 @ViewChild 在视图中调用组件上的方法到 QueryList
- r - 如何使用基于用户输入的函数创建数据框?
- python - 愚蠢的问题:有没有办法让每 X 个 LED 重复一个颜色模式?还是我必须写出灯条中每个 LED 的图案?