【问题标题】:SQL Server Replace Nulls in Outer JoinSQL Server 替换外部联接中的空值
【发布时间】:2020-04-14 18:57:43
【问题描述】:

我正在使用外部联接加入 2 个表。

SELECT
    T1.DATE, 
    T2.DATE, 
    COALESCE(T2.ID, -1), 
FROM Table1 as T1
LEFT JOIN TABLE2 as T2 ON t1.date = t.date;

示例结果:

TABLE1.DATE =  03/15  03/16   03/17     03/18    03/19   03/30
TABLE2.DATE =  NULL   03/16   03/17     NULL     NULL    03/20
TABLE2.ID   =  -1     20      30        -1       -1      40

寻找一种将 -1 替换为最近匹配值的方法。

I.E. 3/15 日期将为 NULL,但 03/16 我需要根据 03/16 的数据设置 ID,并为 03/15 和 03/16 填充值 20。

然后在 03/20 再次将值 40 填充到 03/18、03/19 和 03/20。

【问题讨论】:

  • 指定预期的结果。此外,逐行加上适当的列,更容易阅读。

标签: sql sql-server outer-join


【解决方案1】:

我想你想要outer apply

SELECT T1.DATE, T2.DATE as effective_date,
       T2.ID
FROM Table1 T1 OUTER APPLY
     (SELECT TOP (1) T2.*
      FROM TABLE2 as T2
      WHERE t1.date <= t.date
      ORDER BY t2.date DESC
     ) T2;

请注意,第二列返回与id 关联的日期,而不是来自t1 的匹配日期。

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多