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

Откуда: Барнаул
Сообщений: 3
create table #T
(
id int identity(1,1),
c1 int null,
c2 int null,
c3 int null
)
insert #T(c1,c2,c3) values(1, 1, null, null)
insert #T(c1,c2,c3) values(2, null, 2, null)
insert #T(c1,c2,c3) values(3, null, 3, 4)

Получаем:
idс1c2c3
11nullnull
2null2null
3null34

Нужно, чтобы получилось так ("сдвиг значений вверх"):
idс1c2c3
1124
2null3null
3nullnullnull

Реализовал - используя cursor (тупой перебор) - но быстродействие ужасное.
Подскажите, можно ли сделать такое быстрее?
1 окт 09, 08:22    [7727896]     Ответить | Цитировать Сообщить модератору
 Re: Сдвинуть значений вверх  [new]
Добрый Э - Эх
Guest
Версия сервера?
1 окт 09, 08:36    [7727914]     Ответить | Цитировать Сообщить модератору
 Re: Сдвинуть значений вверх  [new]
vladexl
Member

Откуда: Барнаул
Сообщений: 3
Добрый Э - Эх
Версия сервера?

2000 SP4
1 окт 09, 08:40    [7727919]     Ответить | Цитировать Сообщить модератору
 Re: Сдвинуть значений вверх  [new]
Добрый Э - Эх
Guest
create table #T
( 
  id int identity(1,1), 
  c1 int null, 
  c2 int null, 
  c3 int null
);
insert #T(c1,c2,c3) values(   1, null, null);
insert #T(c1,c2,c3) values(null,    2, null);
insert #T(c1,c2,c3) values(null,    3,    4);

declare @T1 table
( 
  rn1 int identity(1,1), 
  c1 int null
);
declare @T2 table
( 
  rn2 int identity(1,1), 
  c2 int null
);
declare @T3 table
( 
  rn3 int identity(1,1), 
  c3 int null
);
insert into @t1(c1) select c1 from #t where c1 is not null order by id;
insert into @t2(c2) select c2 from #t where c2 is not null order by id;
insert into @t3(c3) select c3 from #t where c3 is not null order by id;

select t0.id, 
       t0.c1 as old_c1, t0.c2 as old_c2, t0.c3 as old_c3,
       t1.c1 as new_c1, t2.c2 as new_c2, t3.c3 as new_c3
  from #t as t0
  left join @t1 as t1 on t0.id = t1.rn1
  left join @t2 as t2 on t0.id = t2.rn2
  left join @t3 as t3 on t0.id = t3.rn3
idold_c1old_c2old_c3new_c1new_c2new_c3
11NULLNULL124
2NULL2NULLNULL3NULL
3NULL34NULLNULLNULL
1 окт 09, 09:03    [7727952]     Ответить | Цитировать Сообщить модератору
 Re: Сдвинуть значений вверх  [new]
vladexl
Member

Откуда: Барнаул
Сообщений: 3
Добрый Э - Эх,

Идею понял, пасиб!
1 окт 09, 09:10    [7727964]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить