|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
Дано: таблица заявок: Код: sql 1. 2. 3. 4. 5. 6.
и таблица приходов по этим заявкам: Код: sql 1. 2. 3. 4. 5.
Необходимо заполнить таблицу соответствия приходов заявкам: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Связь прихода и заявки - по полю item Нюансы: 1. В позиции прихода может быть меньшее количество, чем в заявке - тогда вставляем именно то количество, которое в приходе; при появлении следующего прихода на тот же item добавляем новую запись - и так до тех пор, пока количество, указанное в заявке, не будет меньшим или равным суммарному количеству по приходам. 2. В приходах на отдельно взятый item количество записей может быть меньше, чем заявок на этот же item - в это случае заявки привязываются по возрастанию срока создания. Заявки, на которые не хватило прихода, оставляем в ожидании следующих приходов. 3. Если в приходе количество больше, чем в отдельно взятой заявке, то на заявку распределяем столько, сколько указано в заявке, остаток распределяем на следующую заявку в соответствии с приоритетом (сроком) заявки, остаток, ели он еще есть - на следующую, итд, пока не выберем всё количество по приходу. 4. Если по приходу всё имеющееся количество распределено по заявкам, то такие приходы для связывания больше не рассматриваются. Пример: Заявки: idcreateditemquantity101.01.2015Петрушка1202.01.2015Укроп2303.01.2015Петрушка50404.01.2015Укроп50505.01.2015Килька50 Приходы: iditemquantity1Петрушка402Укроп403Килька40 Распределение: idclaim_idincoming_idquantity11112313932224423855340 (и при наличии следующих приходов на заявку 3 надо будет дораспределить 11б на заявку 4 - 12, на заявку 5 - 10). Пока удалось родить только простыню мрачных процедурных конструкций с курсорами и if'ами. Вопрос: можно ли вышеописанное сделать запросом? Делается для 2005-го сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 09:14 |
|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
Заявки-приходыВопрос: можно ли вышеописанное сделать запросом? а кто вызывать запрос то будет ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 09:36 |
|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
Maxxа кто вызывать запрос то будет ? Клиентское приложение (задание по расписанию в windows scheduler'е). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 09:40 |
|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
Заявки-приходыMaxxа кто вызывать запрос то будет ? Клиентское приложение (задание по расписанию в windows scheduler'е). и вы каждый раз будете ве пересчитывать ? Просто любопытно ..а так ,то путь решения есть в ФАКЕ по форуму. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 09:42 |
|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
Maxxи вы каждый раз будете ве пересчитывать ? Нет, не всё - только по приходам и заявкам, не поставленным в соответствие, и по которым не покрыто всё количество. От периодичности пересчета тут в любом случае не уйти, т.к. будут появляться новые заявки/приходы, которые нужно связывать. При определенном периоде пересчета (думаю, 1 раз в час) объем пересчитываемых данных будет не такой уж и большой. MaxxПросто любопытно ..а так ,то путь решения есть в ФАКЕ по форуму. подразумевается статья про нарастающий итог? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 09:59 |
|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
Заявки-приходыПри определенном периоде пересчета (думаю, 1 раз в час) объем пересчитываемых данных будет не такой уж и большой. я , конечно,не на что не намекаю...но у вас нет не одного поля в таблицах которое рассказало что считать не надо Заявки-приходыподразумевается статья про нарастающий итог? И она тоже,а так списание методом FIFO ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 10:22 |
|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
В приниципе, все вполне работает вот так: Код: sql 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
- но вот эта процедурная простыня мне не нравится. Попробовал запрос внутри курсорного цикла переделать в рекурсивное cte - не выходит, в них нельзя использовать top и агрегаты. А что еще тут можно сделать, как-то не соображу. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 12:13 |
|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
Заявки-приходы, Вам шашечки или ехать? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 12:23 |
|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 12:31 |
|
Покрытие заявок приходами по приоритетам - как обойтись без процедурной логики?
|
|||
---|---|---|---|
#18+
Владислав КолосовЗаявки-приходы, Вам шашечки или ехать? Мне ехать, но побыстрее - не раз сталкивался с ситуацией, когда в MSSQL процедурная логика ощутимо медленне запросной. invm http://www.sql.ru/forum/1018035/zadachka-pro-yabloki-ili-sliyanie-2h-tablic Ага, спасибо, именно то, что нужно. Получилось так: Код: sql 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 15:27 |
|
|
start [/forum/topic.php?fid=46&msg=38995625&tid=1697706]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 140ms |
0 / 0 |