Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Focha Member Откуда: Москва Сообщений: 553 |
Ребят, знаю как через курсор, но долго, да и курсор не охота использовать Необходимо складывать предыдущие строки и когда сумма будет равна или больше единицы, записать значение целого числа. Во вложение файл
Сообщение было отредактировано: 24 сен 18, 14:36 |
|
24 сен 18, 14:33 [21684071] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
Во вложении было вот это: К сообщению приложен файл. Размер - 30Kb |
24 сен 18, 14:36 [21684078] Ответить | Цитировать Сообщить модератору |
Focha Member Откуда: Москва Сообщений: 553 |
Спасибо Вот добавил еще столбцы, может так будет понятней К сообщению приложен файл. Размер - 22Kb |
||
24 сен 18, 14:43 [21684097] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2241 |
Focha, пронумеровать row-number-ом, и потом рекурсивным СТЕ, - будет проще всего ;with cte as ( select [buffer]=case when [plan]>=1 then 0 else [plan] end ,plan_smalli=case when [plan]>=1 then floor([plan]) end , ... from T where rn=1 union all select [buffer]=case when cte.[buffer]+T.[plan]>=1 then 0 else cte.[buffer]+T.[plan] end ,plan_smalli=case when cte.[buffer]+T.[plan]>=1 then floor(cte.[buffer]+T.[plan]) end , ... from cte inner join T on cte.rn=T.rn-1) select * from cte order by rn |
24 сен 18, 14:50 [21684120] Ответить | Цитировать Сообщить модератору |
iiyama Member Откуда: Сообщений: 642 |
Focha, Немного офф, Смешанные ощущения, вроде вы не новичек и писать Вам про скрипты создания и заполнения данными-лишнее с другой стороны ни того ни даже версии сервера не видно, чуднО А по теме- нарастающий итог давно считается без курсоров, посмотреть "предыдущее" значение с явным определенным порядком тоже не проблема |
24 сен 18, 14:50 [21684121] Ответить | Цитировать Сообщить модератору |
Посетитель Member Откуда: Сообщений: 1210 |
Focha,with a as (select * from(values(201908,0.298645),(201907,0.395862),(201906,0.496441),(201905,0.594498),(201904,0.613721),(201903,0.72629) ,(201902,0.819897),(201901,1.184565))a(a,b)) select *,case when floor(c)>floor(c-b) then floor(c)-floor(c-b) end d from (select *,sum(b)over(order by a desc rows between unbounded preceding and current row) c from a)b |
24 сен 18, 14:53 [21684125] Ответить | Цитировать Сообщить модератору |
Focha Member Откуда: Москва Сообщений: 553 |
Версия: Microsoft SQL Server 2008 R2 (SP2) - 10.50.4297.0 (X64) |
||
24 сен 18, 14:55 [21684132] Ответить | Цитировать Сообщить модератору |
Focha Member Откуда: Москва Сообщений: 553 |
Да, крутая штука, но увы я ранее не указал версию сервера, в моей версии 2008 это не работает |
||
24 сен 18, 15:00 [21684144] Ответить | Цитировать Сообщить модератору |
Посетитель Member Откуда: Сообщений: 1210 |
Вы не знаете, как реализовать нарастающий итог в 2008? |
||||
24 сен 18, 15:01 [21684149] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
гугл - накопительный итог, даст варианты на любой sql |
||||
24 сен 18, 15:01 [21684150] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2396 |
https://www.sql.ru/forum/128516/top-10-samyh-populyarnyh-voprosov первая тема |
24 сен 18, 15:19 [21684186] Ответить | Цитировать Сообщить модератору |
Focha Member Откуда: Москва Сообщений: 553 |
Спасибо! |
||
24 сен 18, 15:21 [21684190] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |