Операция SQL Server Row by Row - PullRequest
0 голосов
/ 07 июля 2010

Я пытаюсь выполнить какую-либо операцию в столбце «Увеличение» на основе предыдущей записи строки в столбце «Значение»

например,

row_num| Period | Measure | Decay
1      | Jan 08 | 10      | 
2      | Feb 08 | 18      | 
3      | Mar 08 | 7       | 
4      | Apr 08 | 67      | 

Я хотел бы обновить столбец «Распад»на основе формулы

row_num| Period | Measure| Decay
1      | Jan 08 | 10     | = 10             -> first value in 'Measures'
2      | Feb 08 | 18     | = 10*0.5+18 = 23 -> previous decay record *0.5 + current measure
3      | Mar 08 | 7      | = 23*0.5+7  = 18.5
4      | Apr 08 | 67     | = 18.5*0.5+67 = 76.25

будет ли здесь применим курсор?как будет выглядеть синтаксис?спасибо

Ответы [ 2 ]

3 голосов
/ 07 июля 2010

Вот рабочий пример с использованием рекурсивного CTE (также обратите внимание, что арифметика в вашем примере неверна):

-- SO3192010

DECLARE @t AS TABLE (row_num int NOT NULL, Period varchar(6) NOT NULL, Measure float NOT NULL)
INSERT INTO @t VALUES (1, 'Jan 08', 10)
    ,(2, 'Feb 08', 18)
    ,(3, 'Mar 08', 7)
    ,(4, 'Apr 08', 67)

;WITH r AS (
    SELECT t.*, Measure AS Decay
    FROM @t AS t
    WHERE t.row_num = 1

    UNION ALL

    SELECT t.*, r.Decay * 0.5 + t.Measure AS Decay
    FROM r
    INNER JOIN @t AS t
        ON t.row_num = r.row_num + 1
)
SELECT *
FROM r
ORDER BY row_num​
0 голосов
/ 11 июня 2012
UPDATE
   tbl_test 
SET
   col_name = 'xyq' 
FROM
   (
   SELECT
      *,
      ROW_NUMBER() OVER (ORDER BY name) AS rno
   FROM
     tbl_test  
   )tbl_test
WHERE
   rno = 3  

--rno is the rownumber that u want to update
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...