我有一个大查询,结果如下表所示(摘要):
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
非常感谢任何帮助!
答案 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
了解更多详情,请参阅