|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
Добрый день всем. SQL 2012 Надо разбить 2 суммы бонуса (план и факт) пропорцианально другой сумме по документам задача вроде станадратная https://www.sql.ru/forum/1004370/polnoe-proporcionirovanie-summy-po-strokam-s-okrugleniem оракловский вариант - но там захардокдено последняя строка В идеале чтобы в последней строке добивалась дельта - (но не обязательно ) я могу и следующим update добить дельту. Поля счетчика (1,2,3,4) нет в таблице (хотя его можно добавить )- Row_number() - думаю по поможет здесь че то гуглом не нарыл примеров хороших на T-sql - хотя уверен 100% что есть (можно англоязычных) Единственный тонкий момент у меня это разрядность - сумма бонуса у меня скажем 100$ а разбить надо на 10000 доков (пока забил 2 знака после запятой ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 19:07 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
Гулин Федор, Что-то вроде такой конструкции. Давайте тестовые данные, для конкретики. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 08:18 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 10:21 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
nullin a_voronin, так можно на ноль поделить ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 10:25 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
Невнимательны вы, Батенька. Небось пишите Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 10:33 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
alexeyvg, а да, действительно ТСу поможет что-то типа такого: Код: sql 1. 2. 3. 4.
Где выделено, нужно поставить что-то своё. Только надо знать, стоит ли, ндс распределять если sum(amount) = 0 fiddle ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 10:41 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
a_voronin, не, километровое выражение в cross apply обернул ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 10:49 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#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. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 13:25 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
a_voronin, а вот и делящий на ноль появился ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 13:46 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
nullin a_voronin, а вот и делящий на ноль появился Это вы заключили лишь оттого, что сумма в знаменателе стоит? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 17:18 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
a_voronin, это про entrypoint ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 18:03 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
nullin a_voronin, это про entrypoint А по вашему нет других способов предотвратить деление на 0. Например, иметь констрейнт, что поле > 0. CONVERT(MONEY, b.[Распределяемая сумма] * a.[Факт]/SUM(a.[Факт]) OVER(PARTITION BY a.[Ид Документа])) AS [Распределенная Сумма Факт] ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 18:21 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
a_voronin, нет смысла обсуждать констрейнты, т.к. в данном случае это может быть уже уровень бизнес-логики, например в срезе по ключевым датам [факт] может быть и ноль (особенно на такое понимание подталкивает то, что есть [план]), плюс ещё один фактор далее. В примере CTE, но, да - это условность, а автор так и не удосужился DDL представить. Кстати эта тема не только на Oracle всплывала, помню и здесь за последние полгода - год, что-то такое было, там ещё, помнится Kopelly помог и кажется его вариант отличался от всех представленных на текущий момент. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 19:06 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
nullin, Вот нашел тему, все-таки немного другое там было задание, но у ТС как раз возникла проблема, в том, что общее - убрать ошибку округления. В теме на Oracle как-то этот момент захардкодили, умельцы Насколько важно наименовать темы в соответствии с решаемой проблемой Помогите с запросом ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 19:19 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
nullin но у ТС как раз возникла проблема, в том, что общее - убрать ошибку округления. Я вывел для себя такой хак, для борьбы с ошибками округления. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 07:59 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
a_voronin, выглядит странно, и мне кажется тут есть проблема: в запросе данной темы round(), значит если 500(мл) на 3 поделить, и округлить, то получится набор 166.67, 166.67, 166.67 -> 166.66 - ошибка в минус идет. Вот, если было бы floor(). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 11:20 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
nullin a_voronin, выглядит странно, и мне кажется тут есть проблема: в запросе данной темы round(), значит если 500(мл) на 3 поделить, и округлить, то получится набор 166.67, 166.67, 166.67 -> 166.66 - ошибка в минус идет. Вот, если было бы floor(). CAST(X AS DECIMAL(18,2)) вам сделает FLOOR ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 13:42 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
a_voronin, наверно не совсем понятно выразился, в примере не floor, а round, так что так не прокатит, и способ этот на мой взгляд сомнителен. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 17:34 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
nullin, Вот такой хак прокатит FLOOR(X * 100) * 0.01 Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 18:43 |
|
разбить суммы пропорцианально другой сумме по документам
|
|||
---|---|---|---|
#18+
a_voronin, там во какая штука есть: Код: sql 1.
По умолчанию вместо единицы - ноль. Если поставить что-либо отличное от нуля, то будет усекать. В итоге поправка для распределения 500 на 3, будет +0.02, а не -0.01 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 21:21 |
|
|
start [/forum/topic.php?fid=46&fpage=70&tid=1686514]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 124ms |
0 / 0 |