2013-07-13 3 views

ответ

4

Если по «предыдущей» строке вы имеете в виду строку, где id является самым большим значением, меньшим, чем значение в текущей строке, вы может использовать функцию lag() в SQL Server 2012 или коррелированный subq uery:

UPDATE myTable 
    SET ParentID = (select top 1 id 
        from mytable m2 
        where m2.id < myTable.id 
        order by id desc 
        ) 
+0

Отлично! благодаря – totalitarian

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 

Примечание: может быть, это может быть решена в более простой способ, но это было первое, что произошло со мной, с тем, что вы опубликовали

Смежные вопросы