Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在sql server中多次更新单个表_Sql Server - Fatal编程技术网

Sql server 在sql server中多次更新单个表

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

我有一个名为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:

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

你能告诉我们你试过什么吗它不起作用没关系吗?你可以使用的一种技术是。你能告诉我们你尝试了什么吗?它不起作用没有关系吗?你可以使用的一种技术是。