У меня есть эти данные:Группа строк по условию
Start End Quantity
425 449 24
450 474 24
475 499 24
500 524 24
2300 2324 24
2400 2499 99
2500 2599 99
2800 2899 99
2900 2999 99
3200 3249 49
3250 3299 49
3300 3349 49
3350 3399 49
3400 3449 49
3500 3549 49
3600 3624 24
3650 3674 24
3700 3724 24
3950 3964 14
4000 4000 0
4150 4399 249
4400 4499 99
5034 5075 41
Количество является результатом End - Start
.
Я хотел бы получить следующие данные, в Generated
строке:
Start End Quantity
425 449 24
450 474 24
475 499 24
500 524 24
425 524 96
2300 2324 24
2300 2324 24
2400 2499 99
2500 2599 99
-----GENERATED----
425 2599 438
------------------
2800 2899 99
2900 2999 99
3200 3249 49
3250 3299 49
3300 3349 49
3350 3399 49
3400 3449 49
3500 3549 49
-----GENERATED-----
2800 3549 492
------------------
3600 3624 24
3650 3674 24
3700 3724 24
3950 3964 14
4000 4000 0
4150 4399 249
4400 4499 99
5034 5075 41
-----GENERATED-----
3600 5075 475
------------------
условия является то, что он имеет не суммировать все величины до 500. Если он проходит 500 сделать новый счет.
Я попытался с Rollup, но я не смог найти правильное условие, чтобы заставить его работать.
Конечно, это проще сделать, программируя код вместо SQL, но мы должны сделать это в среде базы данных. Инструменты, чтобы получить сформированные строки могут быть все что угодно, циклических функций, новые таблицы и т.д.
Ошибка решения
меня в ошибку при запуске @ запроса ППРР в:
Msg 530, Level 16, State 1, Line 1
The statement terminated. The maximum recursion 100 has been exhausted before statement completion.
Я нашел решение здесь: http://sqlhints.com/tag/the-statement-terminated-the-maximum-recursion-100-has-been-exhausted-before-statement-completion/
Update 1
Использование @ запроса ППРР в мы получили следующее:
Start End rn st
(400) 424 1 24
425 449 2 48
450 474 3 72
475 499 4 96
500 524 5 120
2300 2324 6 144
2400 2499 7 243
2500 2599 8 342
2800 (2899) 9 (441)
(2900) 2999 10 99
3200 3249 11 148
3250 3299 12 197
3300 3349 13 246
3350 3399 14 295
3400 3449 15 344
3500 3549 16 393
3600 3624 17 417
3650 3674 18 441
3700 3724 19 465
3950 3964 20 479
4000 (4000) 21 (479)
(4150) 4399 22 249
4400 4499 23 348
5034 (5075) 24 (389)
Это становится ближе к тому, что нам нужно. Можно ли извлекать только данные между (
и )
при отбрасывании других данных? Мы также можем использовать курсоры.
просим использовать тег dbms, который вы используете. –
@vkp Используемая база данных - sql-server-2005 – user7441876
Вы можете попробовать рекурсивный запрос. –