Sql server 在sql server中多次更新单个表
我有一个名为test的表,其中包含以下数据 表中数据为跨国数据。2017年4月1日,我们拥有了7号机组,下一笔交易于2017年4月5日与7号机组进行 现在我想用上一个交易日期更新所有缺失交易日期的Units列 比如:2017-04-02、2017-04-03、2017-04-04的单位应为5 2017-04-06、2017-04-07、2017-04-08、2017-04-09的单位应为7 我尝试在sql中使用merge语句,但没有成功。如果没有什么帮助,我们将不胜感激。尝试以下SQL:Sql server 在sql server中多次更新单个表,sql-server,Sql Server,我有一个名为test的表,其中包含以下数据 表中数据为跨国数据。2017年4月1日,我们拥有了7号机组,下一笔交易于2017年4月5日与7号机组进行 现在我想用上一个交易日期更新所有缺失交易日期的Units列 比如:2017-04-02、2017-04-03、2017-04-04的单位应为5 2017-04-06、2017-04-07、2017-04-08、2017-04-09的单位应为7 我尝试在sql中使用merge语句,但没有成功。如果没有什么帮助,我们将不胜感激。尝试以下SQL: UP
UPDATE TEST
SET UNITS = (SELECT TOP 1 UNITS
FROM TEST t1
WHERE t1.TDATE < TEST.TDATE
AND t1.UNITS IS NOT NULL
ORDER BY TDATE DESC)
WHERE UNITS IS NULL
尝试以下SQL:
UPDATE TEST
SET UNITS = (SELECT TOP 1 UNITS
FROM TEST t1
WHERE t1.TDATE < TEST.TDATE
AND t1.UNITS IS NOT NULL
ORDER BY TDATE DESC)
WHERE UNITS IS NULL
请尝试下面的更新声明,它为我的工作与给定的数据
DECLARE @tblTest AS Table
(
col1 INT,
tdate date,
units INT
)
INSERT INTO @tblTest values (12344,'2017-04-01',5)
INSERT INTO @tblTest values (12344,'2017-04-02',NULL)
INSERT INTO @tblTest values (12344,'2017-04-03',NULL)
INSERT INTO @tblTest values (12344,'2017-04-04',NULL)
INSERT INTO @tblTest values (12344,'2017-04-05',7)
INSERT INTO @tblTest values (12344,'2017-04-06',NULL)
INSERT INTO @tblTest values (12344,'2017-04-07',NULL)
INSERT INTO @tblTest values (12344,'2017-04-08',NULL)
INSERT INTO @tblTest values (12344,'2017-04-09',NULL)
DECLARE @i int=0;
UPDATE @tblTest SET @i=units=0+ISNULL(units,@i)
SELECT * FROM @tblTest
输出:
请尝试下面的更新声明,它为我的工作与给定的数据
DECLARE @tblTest AS Table
(
col1 INT,
tdate date,
units INT
)
INSERT INTO @tblTest values (12344,'2017-04-01',5)
INSERT INTO @tblTest values (12344,'2017-04-02',NULL)
INSERT INTO @tblTest values (12344,'2017-04-03',NULL)
INSERT INTO @tblTest values (12344,'2017-04-04',NULL)
INSERT INTO @tblTest values (12344,'2017-04-05',7)
INSERT INTO @tblTest values (12344,'2017-04-06',NULL)
INSERT INTO @tblTest values (12344,'2017-04-07',NULL)
INSERT INTO @tblTest values (12344,'2017-04-08',NULL)
INSERT INTO @tblTest values (12344,'2017-04-09',NULL)
DECLARE @i int=0;
UPDATE @tblTest SET @i=units=0+ISNULL(units,@i)
SELECT * FROM @tblTest
输出:
这是我一直在使用的一个快速简单的解决方案。有关的更多信息
这是我一直在使用的一个快速简单的解决方案。有关的更多信息 我们可以用于此场景的合并函数
DECLARE @tblTest AS Table
(
col1 INT,
tdate date,
units INT
)
INSERT INTO @tblTest values (12344,'2017-04-01',5)
INSERT INTO @tblTest values (12344,'2017-04-02',NULL)
INSERT INTO @tblTest values (12344,'2017-04-03',NULL)
INSERT INTO @tblTest values (12344,'2017-04-04',NULL)
INSERT INTO @tblTest values (12344,'2017-04-05',7)
INSERT INTO @tblTest values (12344,'2017-04-06',NULL)
INSERT INTO @tblTest values (12344,'2017-04-07',NULL)
INSERT INTO @tblTest values (12344,'2017-04-08',NULL)
INSERT INTO @tblTest values (12344,'2017-04-09',NULL)
DECLARE @i int=0;
UPDATE @tblTest SET @i=units=0+COALESCE(units,@i)
SELECT * FROM @tblTest
输出
col1 tdate units
12344 2017-04-01 5
12344 2017-04-02 5
12344 2017-04-03 5
12344 2017-04-04 5
12344 2017-04-05 7
12344 2017-04-06 7
12344 2017-04-07 7
12344 2017-04-08 7
12344 2017-04-09 7
我们可以用于此场景的合并函数
DECLARE @tblTest AS Table
(
col1 INT,
tdate date,
units INT
)
INSERT INTO @tblTest values (12344,'2017-04-01',5)
INSERT INTO @tblTest values (12344,'2017-04-02',NULL)
INSERT INTO @tblTest values (12344,'2017-04-03',NULL)
INSERT INTO @tblTest values (12344,'2017-04-04',NULL)
INSERT INTO @tblTest values (12344,'2017-04-05',7)
INSERT INTO @tblTest values (12344,'2017-04-06',NULL)
INSERT INTO @tblTest values (12344,'2017-04-07',NULL)
INSERT INTO @tblTest values (12344,'2017-04-08',NULL)
INSERT INTO @tblTest values (12344,'2017-04-09',NULL)
DECLARE @i int=0;
UPDATE @tblTest SET @i=units=0+COALESCE(units,@i)
SELECT * FROM @tblTest
输出
col1 tdate units
12344 2017-04-01 5
12344 2017-04-02 5
12344 2017-04-03 5
12344 2017-04-04 5
12344 2017-04-05 7
12344 2017-04-06 7
12344 2017-04-07 7
12344 2017-04-08 7
12344 2017-04-09 7
你能告诉我们你试过什么吗它不起作用没关系吗?你可以使用的一种技术是。你能告诉我们你尝试了什么吗?它不起作用没有关系吗?你可以使用的一种技术是。