3

私はそのような更新クエリを持っています

UPDATE myTable
SET ParentID = X

X を現在更新中の前の行の ID にする必要があります。

何か案は?

4

2 に答える 2

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 に答える