Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Знаю, что динамические курсоры, но как??.... / 4 сообщений из 4, страница 1 из 1
16.10.2002, 18:11:25
    #32058912
Vedma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знаю, что динамические курсоры, но как??....
Как-то у меня с динамическими курсорами не складывается....
Подскажите...
Такая штука:
надо сумировать разницу межлу значениями 2-х колонок(полей) - накапливаемая разница, причем когда она достигнет определенного значения (например 2), прибавить к значению 2-го поля, потом продолжить дальше до следующего накопления.. и т.д
...
Рейтинг: 0 / 0
16.10.2002, 18:54:48
    #32058946
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знаю, что динамические курсоры, но как??....
Ну так покажите, что именно у вас "не складывается" с курсорами ?

А "прибавить к значению 2-го поля" означает изменить значение этого поля в таблице ?
...
Рейтинг: 0 / 0
16.10.2002, 19:19:19
    #32058956
Vedma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знаю, что динамические курсоры, но как??....
Проблема не в update
Смотри:
данные талицы
sum1 sum2
10,22 10.02 - разница 0,2 накопление 0,2
20.5 20.0 - разница 0,5 накопление 0,7
1,4 1,0 - разница 0,4 накопление 1,1
в єтом моменте надо сделать update добавить 1,0, т.е
в последней строке будет
1,4 2,0

и дальше в том же духе, только накопление = 0
...
Рейтинг: 0 / 0
16.10.2002, 20:26:33
    #32058979
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Знаю, что динамические курсоры, но как??....
Получилось что-то такое

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
set nocount on
if object_id('tempdb..#t') is not null drop table #t
create table #t(id int identity, sum1 decimal( 10 , 2 ), sum2 decimal( 10 , 2 ), delta decimal( 10 , 2 ) default  0 . 00 , x int)

insert #t values( 10 . 22 ,  10 . 02 ,  0 ,  1 )
insert #t values( 20 . 5 ,  20 . 00 ,  0 ,  1 )
insert #t values( 1 . 4 ,  1 . 0 ,  0 , 1  )
insert #t values( 10 . 21 ,  10 . 02 ,  0 ,  1 )
insert #t values( 1 . 99 ,  1 . 0 ,  0 ,  1 )
insert #t values(  0 . 05 ,  0 . 04 ,  0 ,  1 )


declare @sum decimal( 10 , 2 )
set @sum =  0 

update #t set @sum = delta = (@sum + ISNULL(sum1-sum2,  0 )) * x
while exists(select * from #t where delta >  1 )
begin
	SET ROWCOUNT  1 
	update #t set sum2 = sum2 +  1 , x =  0  where delta >  1 

	SET ROWCOUNT  0 
	set @sum =  0 
	update #t set @sum = delta = (@sum + ISNULL(sum1-sum2,  0 )) * x
end
select * from #t

Не знаю как правильно и быстро это будет работать на реальных данных. Может курсором вйдет и быстрее и надежнее.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Знаю, что динамические курсоры, но как??.... / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]