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

Откуда: Новокузнецк
Сообщений: 602
Надо из Т1 перенести данные в Т2, добавив сумму к любой записи с одинаковым кодом договора, то есть для КодаДоговора 1 можно обновить запись 1, 6 или 11 в таблице Т2

create table T1 (КодЗаписиТ1 int primary key, КодДоговора int, СуммаТ1 decimal(18, 4), constraint IX_T1 unique(КодДоговора))

insert into T1 (КодЗаписиТ1, КодДоговора, СуммаТ1) select 1, 1, 100
insert into T1 (КодЗаписиТ1, КодДоговора, СуммаТ1) select 2, 2, 200
insert into T1 (КодЗаписиТ1, КодДоговора, СуммаТ1) select 3, 3, 300
insert into T1 (КодЗаписиТ1, КодДоговора, СуммаТ1) select 4, 4, 400
insert into T1 (КодЗаписиТ1, КодДоговора, СуммаТ1) select 5, 5, 500

create table T2 (КодЗаписиТ2 int primary key, КодДоговора int, СуммаТ2 decimal(18, 4))

insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 1, 1, 100
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 2, 2, 200
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 3, 3, 300
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 4, 4, 400
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 5, 5, 500
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 6, 1, 100
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 7, 2, 200
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 8, 3, 300
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 9, 4, 400
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 10, 5, 500
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 11, 1, 100
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 12, 2, 200
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 13, 3, 300
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 14, 4, 400
insert into T2 (КодЗаписиТ2, КодДоговора, СуммаТ2) select 15, 5, 500

drop table T1, T2

Можно ли это сделать запросом без курсора
31 окт 09, 05:59    [7865874]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать курсора  [new]
ё
Guest
update T2
set T2.СуммаТ2 = T2.СуммаТ2 + T1.СуммаТ1
from T1
inner join T2
  on  T1.КодДоговора = T2.КодДоговора
where T2.КодЗаписиТ2 = (select min(КодЗаписиТ2) from T2 t where t.КодДоговора=T2.КодДоговора)
КодЗаписиТ2 КодДоговора СуммаТ2              
----------- ----------- -------------------- 
1           1           200.0000
2           2           400.0000
3           3           600.0000
4           4           800.0000
5           5           1000.0000
6           1           100.0000
7           2           200.0000
8           3           300.0000
9           4           400.0000
10          5           500.0000
11          1           100.0000
12          2           200.0000
13          3           300.0000
14          4           400.0000
15          5           500.0000
31 окт 09, 06:07    [7865875]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать курсора  [new]
слоненок
Member

Откуда:
Сообщений: 479
если в T1 столбцы КодДоговора уникальные:
update Т2
set СуммаТ2 = СуммаТ2 + (
  select top 1 СуммаТ1
  from Т1
  where Т1.КодДоговора = Т2.КодДоговора
)
31 окт 09, 07:16    [7865880]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать курсора  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
Спасибо
31 окт 09, 15:54    [7866592]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить