sql - 使用默认值填充结果
问题描述
如果记录不存在并保留顺序,我正在尝试将记录动态添加到结果中。如何添加附加值并确保存在 [Foreign ID] 的记录?[日期] | [ID]?
例如,如果我进行选择,我如何保证我将始终拥有 [ID] 1,2,3,4,5 用于所有现有的 [Foreign ID] | [日期]?我找到了一篇相关文章,但它是用于 postgress 的。看来我需要理解和使用合并。
**Schema**
[Foreign ID] | [Date] | [ID] | [Name]
Results...
11 | 2020-02-02 00:00:00.000 | 1 | 'Bob'
11 | 2020-02-02 00:00:00.000 | 2 | 'Alice'
12 | 2020-02-02 00:00:00.000 | 1 | 'Bob'
12 | 2020-02-02 00:00:00.000 | 2 | 'Alice'
13 | 2020-02-03 00:00:00.000 | 1 | 'Bob'
14 | 2020-02-03 00:00:00.000 | 2 | 'Alice'
15 | 2020-02-03 00:00:00.000 | 1 | 'Bob'
16 | 2020-02-03 00:00:00.000 | 2 | 'Alice'
解决方案
您可以使用cross join
来获取行并使用 aleft join
来引入现有数据:
select f.foreign_id, d.date, v.id, t.name
from (select distinct foreign_id from t) f cross join
(select distinct date from t) d cross join
(values (1), (2), (3), (4), (5)) v(id) left join
t
on t.foreign_id = f.foreign_id and
t.date = d.date and
t.id = v.id;
推荐阅读
- ruby-on-rails - RSpec 抛出奇怪的错误文本
- python - 在 Flask (Python) 中处理自定义异常时出错
- google-api - 谷歌地理编码格式问题。收到未定义的偏移错误
- sql - if 语句中满足条件时的增量值
- python - 从 flake8 测试中排除 .env 目录?
- pyspark - 如何合并在 pyspark 中重复的列?
- redis - 从站上的 Redis 哨兵从站错误链接状态
- gitlab - GitLab CI/CD 如果成功或失败,如何在运行器上运行脚本?
- scala - 如何编写数据集编码器以支持将函数映射到 Scala Spark 中的 org.apache.spark.sql.Dataset[String]
- java - 在 java 的回文编中使用大写的错误