首页 > 解决方案 > 使用默认值填充结果

问题描述

如果记录不存在并保留顺序,我正在尝试将记录动态添加到结果中。如何添加附加值并确保存在 [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'

标签: sqlsql-server

解决方案


您可以使用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;

推荐阅读