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

Откуда:
Сообщений: 7
Задачка:

Есть столбцы.
ID Norder
1 1
2 2
3 3
4 4

Мне например нужно третий элемент Norder поместить на первую строку, все остальное сдвинуть.
чтобы получилось
ID Norder
3 1
1 2
2 3
4 4

Как это можно реализовать?

Я то хотел сделать сл. образом
@ID - элемент который надо вставить и @Norder -элемент куда надо вставить
В данном случае: @ID=3; @Norder=1;

update addModule set NOrder=NOrder +1 where (NOrder>=@NOrder AND Norder<=select Norder From tabbble Where ID=@ID)

Только как правильно записать вырожение, чтобы оно выдавало одно значение Norder<=select Norder From tabbble Where ID=@ID
26 авг 09, 14:22    [7582102]     Ответить | Цитировать Сообщить модератору
 Re: как написать запрос?  [new]
Var79
Member

Откуда:
Сообщений: 890
зачем вам 1но значение, вам как раз нужно обовить весь диапазон
26 авг 09, 14:57    [7582303]     Ответить | Цитировать Сообщить модератору
 Re: как написать запрос?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
DECLARE @T TABLE(ID int, NOrder int)

INSERT @T VALUES(1, 1)
INSERT @T VALUES(2, 2)
INSERT @T VALUES(3, 3)
INSERT @T VALUES(4, 4)

DECLARE 
  @ID int,
  @NOrder int
SET @ID = 3
SET @NOrder = 1

;WITH CTE1(ID, NOrder)
AS
(
SELECT
  @ID, @NOrder
UNION ALL
SELECT
  ID,
  ROW_NUMBER() OVER (ORDER BY NOrder) + @NOrder
FROM
  @T T
WHERE
  ID <> @ID AND
  NOrder >= @NOrder)
UPDATE
  T
SET
  NOrder = C.NOrder
FROM
  @T T
  INNER JOIN CTE1 C ON
  T.ID = C.ID

SELECT * FROM @T ORDER BY NOrder

ID          NOrder      
----------- -----------
3 1
1 2
2 3
4 4

(4 row(s) affected)
26 авг 09, 15:09    [7582397]     Ответить | Цитировать Сообщить модератору
 Re: как написать запрос?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
declare @t table(ID int, Norder int)
insert into @t(ID, Norder)
select 1, 1 union all
select 2, 2 union all
select 3, 3 union all
select 4, 4

declare @ID int, @Norder int
select @ID = 1, @Norder = 3

update t1
   set ID = case when ID = @ID then (select ID from @t as t2 where Norder = @Norder)
                 else (select top 1 ID 
                         from @t as t2 
                        where t2.Norder < t1.Norder
                        order by Norder desc)
             end             
  from @t as t1
 where Norder <= @Norder
   and ID >= @ID

select * from @t

ID          Norder
----------- -----------
3           1
1           2
2           3
4           4

(4 row(s) affected)
26 авг 09, 15:12    [7582424]     Ответить | Цитировать Сообщить модератору
 Re: как написать запрос?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
pkarklin,

Не, неправильно, не все варианты перемешений учитываются...
26 авг 09, 15:14    [7582433]     Ответить | Цитировать Сообщить модератору
 Re: как написать запрос?  [new]
Oxot_nik
Member

Откуда:
Сообщений: 7
Спасибо всем!!! буду разбираться
26 авг 09, 16:55    [7583147]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить