SQL获取不同日期在报表帐户中支付的金额
我有这个模式 项目:SQL获取不同日期在报表帐户中支付的金额,sql,sql-server,Sql,Sql Server,我有这个模式 项目: | ItemId | Name | Price | |--------|-------|-------| | 1 | Item1| 5.00 | | 2 | Item2| 2.00 | | OrderId| OrderNum| OrderDate | |--------|---------|------------| | 1 | ORD1 | 2017-05-10 | | 2 | ORD2 | 2017-05
| ItemId | Name | Price |
|--------|-------|-------|
| 1 | Item1| 5.00 |
| 2 | Item2| 2.00 |
| OrderId| OrderNum| OrderDate |
|--------|---------|------------|
| 1 | ORD1 | 2017-05-10 |
| 2 | ORD2 | 2017-05-12 |
|OrderId| ItemId | Total |
--------|--------|---------
| 1 | 1 | 3 |
| 2 | 1 | 2 |
订单头:
| ItemId | Name | Price |
|--------|-------|-------|
| 1 | Item1| 5.00 |
| 2 | Item2| 2.00 |
| OrderId| OrderNum| OrderDate |
|--------|---------|------------|
| 1 | ORD1 | 2017-05-10 |
| 2 | ORD2 | 2017-05-12 |
|OrderId| ItemId | Total |
--------|--------|---------
| 1 | 1 | 3 |
| 2 | 1 | 2 |
订单详细信息:
| ItemId | Name | Price |
|--------|-------|-------|
| 1 | Item1| 5.00 |
| 2 | Item2| 2.00 |
| OrderId| OrderNum| OrderDate |
|--------|---------|------------|
| 1 | ORD1 | 2017-05-10 |
| 2 | ORD2 | 2017-05-12 |
|OrderId| ItemId | Total |
--------|--------|---------
| 1 | 1 | 3 |
| 2 | 1 | 2 |
我如何获得此结果:
|ItemId | OrderId | Paid | Debt |
--------|-----------|----------------
| 1 | 1 | 3 | 2 |
| 1 | 2 | 5 | 0 |
在结果集中,“已付款”列必须包含以前付款的总额,再加上新付款
例如,如何使用公共表表达式来解决此问题?您应该向我们提供:
DECLARE @Item TABLE (Id int, [Name] varchar(15), Price int)
DECLARE @OrderDetails TABLE (OrderId int, ItemId int, Total int)
INSERT INTO @ITEM VALUES (1, 'ITEM1', 5), (2, 'ITEM2', 2)
INSERT INTO @OrderDetails VALUES (1, 1, 3), (2, 1, 2)
这似乎奏效了,我认为还有改进的余地:
SELECT OrderId, ItemId, [SUM1], R.Price - [SUM1]
FROM @OrderDetails AS A
LEFT JOIN @Item AS R ON A.ItemId = R.Id
OUTER APPLY (
SELECT SUM(SUB1.TOTAL) AS [SUM1]
FROM @OrderDetails AS SUB1
WHERE SUB1.ItemId = A.ItemId AND SUB1.OrderId <= A.OrderId
) AS B
选择订单ID、项目ID、[SUM1],R.价格-[SUM1]
从@OrderDetails作为
在A.ItemId=R.Id上以R的形式左连接@Item
外敷(
选择SUM(子1.总计)作为[SUM1]
从@OrderDetails作为SUB1
其中SUB1.ItemId=A.ItemId和SUB1.OrderId您从哪里获得付款和债务?这是我的对账单账户,例如,项目1有两次付款(OrderDetails),金额分别为3和2,因此在结果中,第一行中paid等于3,债务等于ItemPrice-paid。在第二行中,paid是OrderDetails(2)中的新金额加上先前支付的金额(3)等于5。第2行债务是第1行债务-第2行已支付?ItemPrice-第2行已支付吗