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行已支付吗