将收入金额与特定支出金额相关联

时间:2018-10-26 08:31:32

标签: sql-server tsql alteryx

我希望你一切都好。我得到了一组非常具体的数据,我需要按照先进先出的方式将支出的财务金额与入账的财务金额相关联。

我需要能够以类似堆栈的方式确定外发交易来自哪个外来交易。

我已经尝试过使用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

因此,您可以看到余额,收入和支出的总金额。这很容易做到。

我真正挣扎的是将费用与他们的收入相关联-例如,特定费用来自哪个收入,以及多少。

我有一个用逗号分隔的单行方法的示例,但是它可以是多行,其中每个源收入都有一行用于支付特定费用。

我希望有人可以帮助我解决这个问题-我已经动脑了好几个小时。

非常感谢!

0 个答案:

没有答案