Заполните пустые значения столбца следующим ненулевым значением - PullRequest
0 голосов
/ 02 марта 2012

Есть ли простой запрос для заполнения пробелов в столбце следующим ненулевым значением в этом столбце?Мне нужен столбец с такими данными:

--------------------
| ID | Version     |
--------------------
|  1 | '162.39'    |
--------------------
|  2 | NULL        |
--------------------
|  3 | NULL        |
--------------------
|  4 | '162.40'    |
--------------------
|  5 | '162.41'    |
--------------------
|  6 | NULL        |
--------------------
|  7 | NULL        |
--------------------
|  8 | '162.42'    |
--------------------
|  9 | '162.42'    |
--------------------
| 10 | NULL        |
--------------------

Чтобы получить такой результат

--------------------
| ID | Version     |
--------------------
|  1 | '162.39'    |
--------------------
|  2 | '162.40'    |
--------------------
|  3 | '162.40'    |
--------------------
|  4 | '162.40'    |
--------------------
|  5 | '162.41'    |
--------------------
|  6 | '162.42'    |
--------------------
|  7 | '162.42'    |
--------------------
|  8 | '162.42'    |
--------------------
|  9 | '162.42'    |
--------------------
| 10 | NULL        |
--------------------

Последние значения могут быть либо '162.42', либо оставаться на NULL.

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Попробуйте:

UPDATE table t1 
SET Version = (
                 SELECT TOP 1 Version 
                 FROM table t2 
                 WHERE t2.id > t1.id 
                   AND Version IS NOT NULL 
                 ORDER BY t2.ID ASC
              )
WHERE t1.Version IS NULL

Я не пробовал, возможно вам придется исправить некоторые детали.

1 голос
/ 02 марта 2012

Да, вы можете использовать запрос, содержащий коррелированный подзапрос, который вернет первое значение Ids под ним.Что-то вроде следующего: (остерегайтесь кода только из памяти)

SELECT T1.Id, (SELECT TOP 1 Version FROM MyTable T2 WHERE T2.Id > T1.Id AND Version IS NOT NULL ORDER BY T2.Id ASC)
FROM MyTable T1
WHERE T1.Version IS NULL

Затем вы можете использовать этот запрос для включения оператора обновления для обновления таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...