我有表Salesorder
,表的结构是这样的。
Create table Salesorder(SOID int identity, quantity numeric(18,2))
表中的值如下所述。
insert into Salesorder values(100)
insert into Salesorder values(Null)
insert into Salesorder values(200)
insert into Salesorder values(300)
insert into Salesorder values(Null)
insert into Salesorder values(Null)
insert into Salesorder values(500)
insert into Salesorder values(Null)
所以,我想以这种方式更新这个表,这样如果我执行select查询,我应该找到下面的结果。
100
100
200
300
300
300
500
500
这意味着应使用先前的非空值更新所有空值。
答案 0 :(得分:3)
这是工作声明:
Update so1
Set quantity = (select top 1 quantity
from Salesorder so2
where so2.quantity is not null and
so2.SOID < so1.SOID
order by SOID desc)
From Salesorder so1
Where quantity is null;
答案 1 :(得分:1)
此查询将UPDATE
按预期进行,
UPDATE Salesorder1 SET Salesorder1.quantity =
CASE WHEN Salesorder1.quantity IS NULL
THEN (
SELECT TOP 1 SalesOrder2.quantity
FROM Salesorder AS SalesOrder2
WHERE
SalesOrder2.quantity IS NOT NULL AND
SalesOrder2.SOID < SalesOrder1.SOID
ORDER BY SalesOrder2.SOID DESC
)
END
FROM Salesorder AS SalesOrder1
WHERE SalesOrder1.quantity IS NULL
CASE
声明
SalesOrder2.quantity IS NOT NULL
AND SalesOrder2.SOID < SalesOrder1.SOID
ORDER BY SalesOrder2.SOID DESC
将NULL
值替换为前一个值,WHERE
子句以{降序排列NOT NULL
值。
答案 2 :(得分:0)
如果您想在insert语句中获取先前的值:
INSERT INTO SalesOrder
VALUES (ISNULL(?, (
SELECT quantity
FROM SalesOrder s
WHERE s.SOID = (SELECT MAX(si.SOID)
FROM SalesOrder si))