【发布时间】:2021-01-17 17:11:20
【问题描述】:
我想从 2 个按日期排序的表中获取数据: 获取客户的累计余额
我想从中获取数据的 2 个表是我的表:transfers & trans_payments
转会:
ID int
cust_id int
tfrom nvarchar(200)
tto nvarchar(200)
price decimal(18, 2)
tax decimal(18, 2)
final Calculated
tnumber nvarchar(30)
note nvarchar(MAX)
date date
trans_payments:
ID int
cust_id int
value decimal(18, 2)
method nvarchar(30)
note nvarchar(MAX)
date date
假设我有这些数据:
转会:
ID cust_id final date
1 5 3000 22-09-2020
2 5 1500 25-09-2020
3 10 4000 28-09-2020
trans_payments:
ID cust_id value date
1 5 1000 22-09-2020
2 5 1500 23-09-2020
3 5 1000 01-10-2020
4 10 1000 28-09-2020
5 10 2000 01-10-2020
我想创建一个视图来显示客户对购买和付款的操作,如下所示:
客户 5:
cust_id final value Balance date
5 3000 0 3000 22-09-2020 --- > Purchases
5 0 1000 2000 22-09-2020 --- > payment
5 0 1500 500 23-09-2020 --- > payment
5 1500 0 2000 25-09-2020 --- > P
5 0 1000 1000 23-09-2020 --- > payment purchases
最后一行是客户的最终余额
我试过了:
CREATE VIEW customer_account_summary as
WITH Tb0 as
( SELECT ID,date,cust_id,final,0'value' from transfers
UNION
SELECT ID,date,cust_id,0'final',value from trans_payments
)
, Tb1 as
(
SELECT ID,date,cust_id,final,value,Row_Number() over (order by date asc) as [OrderId]
FROM
Tb0
)
SELECT TOP 1000000 T1.ID,T1.cust_id,T1.date,T1.final,T1.value,(Sum(T2.final) - Sum(T2.value)) as Balance FROM Tb1 as T1
INNER JOIN
Tb1 as T2
ON T1.[OrderId] <= T2.[OrderId]
Group By T1.ID,T1.cust_id,T1.date,T1.final,T1.value
Order by [date]
但我有一个问题,如果 2 位客户在同一日期付款,则付款将为 2 位在同一日期付款的客户计算,我尝试为 2 位客户添加 ID 以防止查询对数据进行分组但我'我仍然面临平衡错误。
我怎样才能以正确的方式做到这一点?
【问题讨论】:
标签: sql sql-server subquery union window-functions