【问题标题】:Pad results with default values使用默认值填充结果
【发布时间】:2020-05-26 08:53:07
【问题描述】:

如果记录不存在,我会尝试将记录动态添加到结果中并保留顺序。如何添加附加值并确保存在 [Foreign ID] 的记录? [日期] | [身份证]?

例如,如果我进行选择,我如何保证我将始终拥有 [ID] 1,2,3,4,5 用于所有现有的 [Foreign ID] | [日期]?我找到了related article,但它是用于 postgress 的。看来我需要理解和使用 coalesce。

**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'

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以使用cross join 获取行,使用left 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;
    

    【讨论】:

    • 这真的很接近我的规格,我看到连接中有一些重复。我正在运行一个存储过程,它将所有表连接到一个结果集中。所以在这种情况下,如果有帮助的话,我会在同一个结果集上进行所有这些交叉连接和左连接。如果这不能澄清问题,我会在明天发布更多内容。
    • @node943034835 。 . .如果您的原始表有重复,这只会有“重复”。
    • 你是对的。问题不在于重复,而在于多余的不需要的数据。我需要也具有外国 ID 的日期,否则它会创建比所需更多的值。我将查询更改为“(select distinct, date foreign_id from t) f cross join”。如果我想替换这些连接中的 NULL 值,该怎么做?
    • 我想我认为这是我们的 [this] (stackoverflow.com/a/1664268/7999434) 再次感谢!
    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多