使用特定行的值填充查询的Null值

时间:2014-07-12 12:46:05

标签: sql sql-server join

我有一个大查询,结果如下表所示(摘要):

Rank | LockID | LockNumber | FirstInvoiceDate 

 1   |    1   |     800    | 2014-10-10      
 2   |    1   |     800    |   NULL
 3   |    2   |     800    |   NULL
 1   |    3   |     900    | 2015-12-10
 2   |    4   |     900    |   NULL

我想把最后一栏改为:

| FirstInvoiceDate 

| 2014-10-10      
| 2014-10-10      
| 2014-10-10      
| 2015-12-10      
| 2015-12-10   

即,具有相同编号的锁需要具有相同的FirstInvoiceDate

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用更新执行此操作。 SQL Server具有可更新CTE的优点,因此您可以这样做:

with toupdate as (
      select t.*, min(FirstInvoiceDate) over (partition by LockNumber) as new_FID
      from table
)
update toupdate
    set FirstInvoiceDate = new_FID;

如果您不需要更新,只需要select中的值,那么您可以使用toupdate中的表达式。

答案 1 :(得分:1)

在检查value是否为NULL

之后,您可以尝试使用名为Lag的函数来获取上一行的值
SELECT ISNULL (LAG(T.FirstInvoiceDate) OVER (ORDER BY p.LockID) ) from yourTable T

了解更多详情,请参阅

http://blog.sqlauthority.com/2013/09/22/sql-server-how-to-access-the-previous-row-and-next-row-value-in-select-statement/