Ассоциировать сумму дохода с определенной исходящей суммой - PullRequest
0 голосов
/ 26 октября 2018

Надеюсь, ты в порядке. Мне дали очень специфический набор данных, и мне нужно связать исходящие финансовые суммы с входящими в порядке поступления.

Мне нужно иметь возможность по-стеку определять, из какой входящей транзакции была получена исходящая транзакция.

Я пробовал несколько подходов с использованием T-SQL и Alteryx, но пока безрезультатно.

Я надеюсь, что смогу получить несколько советов по этому вопросу.

Вот исходный код таблицы для данных, которые у меня есть (пример данных):

DROP TABLE IF EXISTS #temptable111
CREATE TABLE #temptable111 ( [ID] nvarchar(20), [CUSTOMER] nvarchar(20), [Date] datetime, [Reference] nvarchar(10), [Amount] money )
INSERT INTO #temptable111
VALUES
( 'AC51BFB154B5', '3A9F6F2CDCE7', N'2018-10-01T01:11:27', 'Income', 20 ), 
( '88EB621F9DBB', '3A9F6F2CDCE7', N'2018-10-01T01:08:49', 'Income', 15 ), 
( '142E8D547364', '3A9F6F2CDCE7', N'2018-10-01T01:14:42', 'Expense', -5 ), 
( '08053ADEBFBD', '3A9F6F2CDCE7', N'2018-10-01T01:23:39', 'Expense', -5 ), 
( 'B447DA985EAC', '3A9F6F2CDCE7', N'2018-10-01T01:24:16', 'Expense', -5 ), 
( 'CEBFF471FCB4', '3A9F6F2CDCE7', N'2018-10-01T01:49:06', 'Expense', -10 ), 
( '01535104A357', '3A9F6F2CDCE7', N'2018-10-01T02:41:30', 'Expense', -5 ), 
( 'D8017BF08252', '3A9F6F2CDCE7', N'2018-10-01T02:56:38', 'Income', 25 ), 
( '648F777A1B8C', '3A9F6F2CDCE7', N'2018-10-01T02:58:18', 'Expense', -10 ), 
( 'C052D9B03A89', '3A9F6F2CDCE7', N'2018-10-01T03:43:21', 'Expense', -10 ), 
( '2D00A5F373CC', '3A9F6F2CDCE7', N'2018-10-01T04:01:49', 'Expense', -5 ), 
( 'C7A814618633', '3A9F6F2CDCE7', N'2018-10-01T04:47:39', 'Expense', -2.5 ), 
( '9686EA892C1A', '3A9F6F2CDCE7', N'2018-10-01T05:35:48', 'Expense', -2.5 ), 
( '70EC232B54A1', '3A9F6F2CDCE7', N'2018-10-01T05:48:42', 'Income', 25 ), 
( '69799A0E3AEC', '3A9F6F2CDCE7', N'2018-10-01T06:39:52', 'Expense', -10 ), 
( '1D13593F772C', '3A9F6F2CDCE7', N'2018-10-01T06:42:54', 'Expense', -10 ), 
( '8D92A0E946EF', '3A9F6F2CDCE7', N'2018-10-01T06:43:58', 'Income', 10 ), 
( '9DA38BB7E362', '3A9F6F2CDCE7', N'2018-10-01T07:08:03', 'Income', 10 ), 
( '3243D2EC51CB', '3A9F6F2CDCE7', N'2018-10-01T07:10:54', 'Income', 5 ), 
( 'C3F0BE00EC1D', '3A9F6F2CDCE7', N'2018-10-01T07:16:23', 'Income', 25 ), 
( '9F173122FEF4', '3A9F6F2CDCE7', N'2018-10-01T07:21:06', 'Expense', -50 ), 
( 'CABDDDEEC060', '3A9F6F2CDCE7', N'2018-10-01T07:28:59', 'Expense', -5 )

SELECT * FROM #temptable111
DROP TABLE IF EXISTS #temptable111

Вот что я пытаюсь сделать:

DROP TABLE IF EXISTS #temptable222
CREATE TABLE #temptable222 ( [ID] nvarchar(20), [CUSTOMER] nvarchar(20), 
[Date] datetime, [Reference] nvarchar(10), [Amount] money, [Balance] money,                 
[RunTot_Spend] money, [RunTot_Purchase] money, [Source Income] 
nvarchar(max), [Source Amount] nvarchar(max) )
INSERT INTO #temptable222
VALUES
( 'AC51BFB154B5', '3A9F6F2CDCE7', N'2018-10-01T01:11:27', 'Income', 20, 20, 
20, 0, NULL, NULL ), 
( '88EB621F9DBB', '3A9F6F2CDCE7', N'2018-10-01T01:08:49', 'Income', 15, 35, 
35, 0, NULL, NULL ), 
( '142E8D547364', '3A9F6F2CDCE7', N'2018-10-01T01:14:42', 'Expense', -5, 30, 
35, -5, 'AC51BFB154B5', '5' ), 
( '08053ADEBFBD', '3A9F6F2CDCE7', N'2018-10-01T01:23:39', 'Expense', -5, 25, 
35, -10, 'AC51BFB154B5', '5' ), 
( 'B447DA985EAC', '3A9F6F2CDCE7', N'2018-10-01T01:24:16', 'Expense', -5, 20, 
35, -15, 'AC51BFB154B5', '5' ), 
( 'CEBFF471FCB4', '3A9F6F2CDCE7', N'2018-10-01T01:49:06', 'Expense', -10, 
10, 35, -25, 'AC51BFB154B5,88EB621F9DBB', '5,5' ), 
( '01535104A357', '3A9F6F2CDCE7', N'2018-10-01T02:41:30', 'Expense', -5, 5, 
35, -30, '88EB621F9DBB', '5' ), 
( 'D8017BF08252', '3A9F6F2CDCE7', N'2018-10-01T02:56:38', 'Income', 25, 30, 
60, -30, NULL, NULL ), 
( '648F777A1B8C', '3A9F6F2CDCE7', N'2018-10-01T02:58:18', 'Expense', -10, 
20, 60, -40, '88EB621F9DBB,D8017BF08252', '5,5' ), 
( 'C052D9B03A89', '3A9F6F2CDCE7', N'2018-10-01T03:43:21', 'Expense', -10, 
10, 60, -50, 'D8017BF08252', '10' ), 
( '2D00A5F373CC', '3A9F6F2CDCE7', N'2018-10-01T04:01:49', 'Expense', -5, 5, 
60, -55, 'D8017BF08252', '5' ), 
( 'C7A814618633', '3A9F6F2CDCE7', N'2018-10-01T04:47:39', 'Expense', -2.5, 
2.5, 60, -57.5, 'D8017BF08252', '2.5' ), 
( '9686EA892C1A', '3A9F6F2CDCE7', N'2018-10-01T05:35:48', 'Expense', -2.5, 
0, 60, -60, 'D8017BF08252', '2.5' ), 
( '70EC232B54A1', '3A9F6F2CDCE7', N'2018-10-01T05:48:42', 'Income', 25, 25, 
85, -60, NULL, NULL ), 
( '69799A0E3AEC', '3A9F6F2CDCE7', N'2018-10-01T06:39:52', 'Expense', -10, 
15, 85, -70, '70EC232B54A1', '10' ), 
( '1D13593F772C', '3A9F6F2CDCE7', N'2018-10-01T06:42:54', 'Expense', -10, 5, 
85, -80, '70EC232B54A1', '10' ), 
( '8D92A0E946EF', '3A9F6F2CDCE7', N'2018-10-01T06:43:58', 'Income', 10, 15, 
95, -80, NULL, NULL ), 
( '9DA38BB7E362', '3A9F6F2CDCE7', N'2018-10-01T07:08:03', 'Income', 10, 25, 
105, -80, NULL, NULL ), 
( '3243D2EC51CB', '3A9F6F2CDCE7', N'2018-10-01T07:10:54', 'Income', 5, 30, 
110, -80, NULL, NULL ), 
( 'C3F0BE00EC1D', '3A9F6F2CDCE7', N'2018-10-01T07:16:23', 'Income', 25, 55, 
135, -80, NULL, NULL ), 
( '9F173122FEF4', '3A9F6F2CDCE7', N'2018-10-01T07:21:06', 'Expense', -50, 5, 
135, -130, 
'70EC232B54A1,8D92A0E946EF,9DA38BB7E362,3243D2EC51CB,C3F0BE00EC1D', 
'5,10,10,5,20' ), 
( 'CABDDDEEC060', '3A9F6F2CDCE7', N'2018-10-01T07:28:59', 'Expense', -5, 0, 
135, -135, 'C3F0BE00EC1D', '5' )

SELECT * FROM #temptable222
DROP TABLE IF EXISTS #temptable222

Итак, вы можете видеть, что есть промежуточная сумма баланса, доходов и расходов. Это легко выполнимо.

То, с чем я действительно борюсь, это связать расходы с их доходами - например, с каким доходом (-ами) поступили конкретные расходы и сколько.

У меня есть пример с разделенным запятыми методом, состоящим из одной строки, но это может быть несколько строк, где есть строка для каждого источника дохода для определенных расходов.

Я надеюсь, что кто-то может мне помочь с этим - я часами ломал голову.

Большое спасибо !!!

...