Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Написать запрос, чтобы не изменился порядок по убыванию  [new]
Torre
Member

Откуда:
Сообщений: 204
В таблицеItems значения OrderIndex: 78, 63,57,49,33,21,19,7
Нужно написать UPDATE запрос, чтобы значения стали, например: 7,6,5,4,3,2,1
То есть, чтобы не изменился порядок по убыванию.
Подскажите, как это можно сделать?
8 июл 13, 16:53    [14537361]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
_djХомяГ
Guest
ROW_NUMBER() не подойдет
8 июл 13, 16:55    [14537372]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
WITH CTE AS(SELECT OrderIndex,NewOrderIndex=ROW_NUMBER()OVER(ORDER BY OrderIndex) FROM Items)
UPDATE CTE SET OrderIndex=NewOrderIndex;
8 июл 13, 16:57    [14537390]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
_djХомяГ
ROW_NUMBER() не подойдет
Torre = _djХомяГ ???
8 июл 13, 16:59    [14537398]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
Torre
Member

Откуда:
Сообщений: 204
iap, спасибо, кажется оно, сейчас проверю
8 июл 13, 17:04    [14537445]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
Torre
Member

Откуда:
Сообщений: 204
WITH CTE AS(SELECT OrderIndex, NewOrderIndex = ROW_NUMBER() OVER(ORDER BY OrderIndex) FROM Items)

UPDATE Items SET OrderIndex = NewOrderIndex

Пишет: Invalid column name 'NewOrderIndex'
Не понимаю как эту ошибку исправить
8 июл 13, 17:13    [14537517]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Torre,

вы прежде чем у гранаты чеку выдергивать, разобрались бы как она действует (что за код вам в пример привели)
8 июл 13, 17:21    [14537564]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
UPDATE CTE SET OrderIndex=NewOrderIndex;

Torre
UPDATE Items SET OrderIndex = NewOrderIndex

Не понимаю как эту ошибку исправить

Типа, творчески переосмыслили предложенный код?
8 июл 13, 17:23    [14537588]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
Torre
Member

Откуда:
Сообщений: 204
Да, уже понял, надо добавить
FROM CTE
8 июл 13, 17:23    [14537589]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
Torre
Member

Откуда:
Сообщений: 204
Спасибо!
8 июл 13, 17:28    [14537606]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Torre, вы правы, это мистика... Или мистификация... Надо обновить Items, поэтому то, что вам написали
iap
WITH CTE AS(SELECT OrderIndex,NewOrderIndex=ROW_NUMBER()OVER(ORDER BY OrderIndex) FROM Items)
UPDATE CTE SET OrderIndex=NewOrderIndex;
верным быть не может по определению! Не нужно изменять несуществующую таблицу! Надо изобретать дальше и продуктивнее, успехов вам!

Ждем с сообщением о новых ошибках в изобретенном запросе
8 июл 13, 18:07    [14537825]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
if object_id('tempdb..#Items') is not null drop table #Items;
create table #Items (OrderIndex int, OldOrderIndex int);
insert #Items values (10,10),(5,5),(2,2),(8,8);

WITH CTE AS(SELECT OrderIndex, NewOrderIndex = ROW_NUMBER() OVER(ORDER BY OrderIndex) FROM #Items)
UPDATE #Items SET OrderIndex = NewOrderIndex
from CTE;

select * from #Items;
OrderIndexOldOrderIndex
110
45
12
48
8 июл 13, 18:09    [14537839]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Можно ещё так:
UPDATE CTE
SET OrderIndex=NewOrderIndex
FROM (SELECT OrderIndex,NewOrderIndex=ROW_NUMBER()OVER(ORDER BY OrderIndex) FROM Items) AS CTE;
8 июл 13, 21:23    [14538581]     Ответить | Цитировать Сообщить модератору
 Re: Написать запрос, чтобы не изменился порядок по убыванию  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
а еще так:
update Items set OrderIndex=(select COUNT(*)from Items i where i.OrderIndex<=Items.OrderIndex)

Это конечно похуже, зато явно указано, что update - на Items
8 июл 13, 21:37    [14538623]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить