У меня проблемы с отображением моих данных в соответствии с запросом. Я пытался использовать рекурсивную таблицу 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)