Суммируйте значения по месяцам, годам и счетам за все месяцы, предшествующие текущему месяцу, и отображайте значения 0, если для конкретной строки данных не существует - PullRequest
1 голос
/ 12 ноября 2019

У меня проблемы с отображением моих данных в соответствии с запросом. Я пытался использовать рекурсивную таблицу CTE (по крайней мере, насколько мне известно), я пробовал перекрестное и внешнее применение, но только тогда повторяются значения для всех дат и результаты дублируются. Мне нужно подвести итоги по менеджерам, счетам и месяцам за наш финансовый год (07/01 / xxxx - 6/30 / xxxx).

Данные должны выглядеть примерно так, когда создается строкадля всех счетов и нулей из суммы, если она не существует в этом месяце:

+-------------+---------------+-----------+--------------+----------+------------------+
| ManagerName |  DebtorName   | YearMonth | YearMonthDay |   TTV    | CommissionAmount |
+-------------+---------------+-----------+--------------+----------+------------------+
| Person 1    | Account Alpha | 2019-07   | 7/1/2019     | 11930.31 | 996.34           |
| Person 1    | Account Alpha | 2019-08   | 8/1/2019     | 83835.74 | 6833.35          |
| Person 1    | Account Alpha | 2019-09   | 9/1/2019     | 0.00     | 0.00             |
| Person 1    | Account Alpha | 2019-10   | 10/1/2019    | 0.00     | 0.00             |
| Person 1    | Account Alpha | 2019-11   | 11/1/2019    | 0.00     | 0.00             |
| Person 1    | Account Beta  | 2019-07   | 7/1/2019     | 188      | 15.04            |
| Person 1    | Account Beta  | 2019-08   | 8/1/2019     | 8662.2   | 769.18           |
| Person 1    | Account Beta  | 2019-09   | 9/1/2019     | 8497.73  | 781.5            |
| Person 1    | Account Beta  | 2019-10   | 10/1/2019    | 8497.73  | 781.5            |
| Person 1    | Account Beta  | 2019-11   | 11/1/2019    | 0.00     | 0.00             |
| Person 2    | Account Gamma | 2019-07   | 7/1/2019     | 1478.38  | 143.73           |
| Person 2    | Account Gamma | 2019-08   | 8/1/2019     | 0.00     | 0.00             |
| Person 2    | Account Gamma | 2019-09   | 9/1/2019     | 0.00     | 0.00             |
| Person 2    | Account Gamma | 2019-10   | 10/1/2019    | 0.00     | 0.00             |
| Person 2    | Account Gamma | 2019-11   | 11/1/2019    | 0.00     | 0.00             |
+-------------+---------------+-----------+--------------+----------+------------------+

Иногда строки будут иметь значения во всех месяцах, а иногда и не будут. Но я не нашел хороший способ заставить это показать правильно.

Вот пример того, как я пробовал рекурсивный метод cte с применением cross, но он дублировал значения в течение месяцев. Например, для учетной записи Альфа в июле он дал мне одну строку с фактическими значениями и одну строку с 0. Я не могу просто взять максимум этого столбца, потому что иногда люди будут иметь и могут иметь отрицательные значения. #PreFinal - это просто таблица, в которой хранятся фактические значения для учетной записи по месяцам и Manager

SELECT ManagerName, DebtorName, YearMonth, YearMonthDay
    ,SUM(TTV) AS TTV
    ,SUM(CommissionAmount) AS CommissionAmount 
FROM #PreFinal
GROUP BY ManagerName, DebtorName, YearMonth, YearMonthDay
UNION ALL 
SELECT DISTINCT ManagerName, DebtorName, LEFT(Y.YearMonthDay, 7) AS YearMonth, Y.YearMonthDay
    ,0
    ,0
    ,0
    ,0
FROM #YearMonthDay y 
Cross apply (SELECT ManagerName, DebtorName, YearMonth, YearMonthDay
                ,SUM(TTV) AS TTV
                ,SUM(CommissionAmount) AS CommissionAmount 
            FROM #PreFinal
            GROUP BY ManagerName, DebtorName, YearMonth, YearMonthDay) P
ORDER BY ManagerName, DebtorName, YearMonthDay

. Вот пример данных в таблице #PreFinal и их типов данных.

    CREATE TABLE #PreFinal (ManagerName VARCHAR(150), DebtorName VARCHAR(150), YearMonth VARCHAR(7), YearMonthDay DATE, TTV NUMERIC(16, 2), CommissionAmount NUMERIC(16, 2))

INSERT INTO #PreFinal VALUES 
    ('Person 1', 'Account Alpha', '2019-07', '07-01-2019', 11930.31, 996.34)
    ,('Person 1', 'Account Alpha', '2019-08', '08-01-2019', 83835.74, 6833.35)
    ,('Person 1', 'Account Beta', '2019-07', '07-01-2019', 188, 15.04)
    ,('Person 1', 'Account Beta', '2019-08', '08-01-2019', 8662.20, 769.18)
    ,('Person 1', 'Account Beta', '2019-09', '09-01-2019', 8497.73, 781.5)
    ,('Person 2', 'Account Gamma', '2019-07', '07-01-2019', 1478.38, 143.73)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...