Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Samat Samat Member Откуда: Сообщений: 16 |
Написал код распределения на все счета, но как распределить по месяцам? |
24 окт 19, 17:01 [22001897] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8723 |
Samat Samat, Добавить в ваш код разделение по месяцам |
24 окт 19, 17:03 [22001899] Ответить | Цитировать Сообщить модератору |
Samat Samat Member Откуда: Сообщений: 16 |
msLex, Вот, что есть. Но не могу остановить цикл CASE WHEN p.N_Amount > Долг AND ROW_NUMBER() OVER (PARTITION BY F_Subscr, YEAR(D_Date), MONTH(D_Date) ORDER BY LINK) = 1 THEN p.N_Amount - Долг ELSE CAST(CAST(p.N_Amount AS FLOAT)*b.N_Amount/NULLIF(Долг,0) AS DECIMAL(15,2)) END Распределение |
24 окт 19, 17:04 [22001901] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2250 |
Его ж тут и нет :) |
||
24 окт 19, 17:06 [22001905] Ответить | Цитировать Сообщить модератору |
Samat Samat Member Откуда: Сообщений: 16 |
court, Как быть? |
24 окт 19, 17:07 [22001907] Ответить | Цитировать Сообщить модератору |
Samat Samat Member Откуда: Сообщений: 16 |
Samat Samat, Не представляю какой код на разделение. С чего начать?
Сообщение было отредактировано: 24 окт 19, 17:31 |
|
24 окт 19, 17:26 [22001930] Ответить | Цитировать Сообщить модератору |
Samat Samat Member Откуда: Сообщений: 16 |
Здравствуйте, у меня проблема с распределением оплаты по счетам. Конкретнее в том что не могу расщепить оплату по месяцам. Код, приведённый ниже, расщепляет оплату на все счета, что есть. Cкрипты создания таблиц могу скинуть. Мб ранжирование и побольше CASE-ов. Любое направление будет оценено. Спасибо. DECLARE @LINK INT SET @LINK =1; With Payments AS ( SELECT * FROM dbo.FD_Payments WHERE LINK = @LINK), Bills AS ( SELECT *, ISNULL(SUM(N_Amount) OVER (PARTITION BY F_Subscr, YEAR(D_Date), MONTH(D_Date)),0) AS Долг FROM dbo.FD_Bills WHERE F_subscr IN (SELECT F_Subscr FROM Payments) AND N_Amount <> 0) SELECT p.LINK as F_Payments, b.LINK as F_Bills, C_Sale_Items, p.N_Amount, b.N_Amount, CASE WHEN p.N_Amount > Долг THEN p.N_Amount - Долг ELSE CAST(CAST(p.N_Amount AS FLOAT)*b.N_Amount/NULLIF(Долг,0) AS DECIMAL(15,2)) END Распределение FROM Payments p JOIN Bills b ON p.F_Subscr = b.F_Subscr |
25 окт 19, 17:53 [22002939] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8330 |
Samat Samat, это в принципе невыполнимая задача, т.к. никто не знает - какой счет был намерен оплатить абонент. Он может, например, перечислить три платежа в один день и в этот же день было выставлено пять счетов. Какие два счета останутся без оплаты? Обычно достаточно баланса для принятия каких-либо решений или оценки ситуации. |
25 окт 19, 18:13 [22002947] Ответить | Цитировать Сообщить модератору |
Samat Samat Member Откуда: Сообщений: 16 |
Владислав Колосов, Распределение пропорциональное |
25 окт 19, 18:23 [22002954] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8330 |
Samat Samat, Приведите пример "пропорционального распределения". |
25 окт 19, 18:27 [22002958] Ответить | Цитировать Сообщить модератору |
Samat Samat Member Откуда: Сообщений: 16 |
Владислав Колосов, Например, распределить поступившую оплату по статьям или по договорам пропорционально долгу. Распределяется сумма оплаты по договорам в соответствии с коэффициентом Долг/СуммаДолга |
25 окт 19, 18:34 [22002966] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8330 |
Samat Samat, в числах нужен пример, понятный математически. Т.е. правила распределения. У Вас слишком обобщенные термины, непонятно. |
25 окт 19, 19:03 [22002977] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37150 |
Владислав Колосов, Про пункт 6 рекомендаций товарищу, у которого закрыто 4 темы из 6, уже рассказывают давно. Но он не сгибается, партизанит как может. |
25 окт 19, 23:19 [22003075] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Посчитай общую сумму долгов сделай цикл по всем статьям/договорам Умножь в цикле "сумму оплаты" на сумму долга по конкретной статье статье/договору и раздели на ранее посчитанную сумму долгов. После всего - прими решение куда деть "ошибки округления" |
||
27 окт 19, 16:09 [22003665] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |