3

我有一个这样的更新查询

UPDATE myTable
SET ParentID = X

我需要 X 是当前正在更新的上一行的 ID。

有任何想法吗?

4

2 回答 2

4

如果“上一个”行是指 id 的最大值小于当前行中的值的行,则可以使用lag()SQL Server 2012 中的函数或相关子查询:

UPDATE myTable
    SET ParentID = (select top 1 id
                    from mytable m2
                    where m2.id < myTable.id
                    order by id desc
                   )
于 2013-07-13T18:43:16.443 回答
1

也许下面的脚本会很有用(假设第一个值没有以前的值,那么它将是 NULL),你可以试试这个HERE

CREATE TABLE TEST(
  ID INT);

INSERT INTO TEST VALUES(10);
INSERT INTO TEST VALUES(20);
INSERT INTO TEST VALUES(30);
INSERT INTO TEST VALUES(40);
INSERT INTO TEST VALUES(50);
INSERT INTO TEST VALUES(60);

/*HERE THE SCRIPT*/
WITH temp AS (
    SELECT x.ID,
      ROW_NUMBER() over (order by x.ID) AS n
    FROM TEST x
)
UPDATE t
SET t.ID = (SELECT temp.ID FROM temp WHERE temp.n = t.n - 1)
FROM (
    SELECT x.ID,
      ROW_NUMBER() over (order by x.ID) AS n
    FROM TEST x
  ) t

SELECT * FROM TEST

注意:也许这可以用一种更简单的方式解决,但这是你发布的内容让我想到的第一件事

于 2013-07-13T18:00:56.653 回答