Страница 1 из 1

sql

Добавлено: 23 ноя 2014, 22:36
kasandra
Доброго времени суток! С SQL я не очень лажу, поэтому попрошу помощи возможно в элементарном вопросе.

Есть таблица, в одной колонке которой заполнены данными не все строки. Пустые значения нужно заполнить значениями из строки вышележащей.

Пыталась сделать это как-то так
update data.st
SET name_type=(select name_type from data.st where id<id and name_type not like ' ' order by id asc)

или так
if st.name_type not like '' then

UPDATE data.st
SET st.name_type=(select name_type from data.st where id>id order by id desc)
end if


Первый вариант все сносит вообще,а второй принципе не работает, выдает ошибку.
Использую Postgresql.
Буду благодарна за подсказку!

Re: sql

Добавлено: 24 ноя 2014, 00:10
trir
id=id-1
это если пропусков нет, а так лучше точнее определить термин "вышележащей"

Re: sql

Добавлено: 24 ноя 2014, 01:41
Ariki
sqlfiddle.com/#!3/30876/1
Upd: Ой, это для SQL Server. Для PostgreSQL будет так:
sqlfiddle.com/#!15/30876/3

Re: sql

Добавлено: 24 ноя 2014, 08:23
gimran
UPDATE data.st
SET st.name_type=(select name_type from data.st where name_type not like '' order by id desc);
Так может быть? Хотя не понял до конца логику запроса.

[ Сообщение с мобильного устройства ]

Re: sql

Добавлено: 24 ноя 2014, 23:11
kasandra
Спасибо всем, что откликнулись!
Ariki, запрос сработал верно, спасибо.