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

А "прибавить к значению 2-го поля" означает изменить значение этого поля в таблице ?
...
Рейтинг: 0 / 0
Знаю, что динамические курсоры, но как??....
    #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
Знаю, что динамические курсоры, но как??....
    #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
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Знаю, что динамические курсоры, но как??....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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