【发布时间】:2017-11-22 14:01:55
【问题描述】:
我有一张包含销售详情的表格。
买家可以购买多件商品并一起付款:在这种情况下,OrderID 对所有商品都是一样的,PaymentAmount 和 PaymentID 也一样
但他们可能会分两期付款,在这种情况下有不同的PaymentID(虽然付款金额可以相同)。
我需要根据PaymentAmounts 和Quantity*Price 之间的差异检查运费是否正确计算
相关栏目是:
| SaleID | OrderID | Quantity | Price | PaymentAmount | PaymentID | Shippingcost |
| 0001 | 001 | 3 | 3.50 | 13.50 | BT123 | 3.00 |
| 0002 | 002 | 1 | 1.50 | 13.50 | BB331 | 5.50 |
| 0003 | 002 | 5 | 2.00 | 13.50 | BB331 | 5.50 |
| 0004 | 002 | 2 | 5.00 | 13.50 | BB332 | 5.50 |
| 0005 | 003 | 1 | 3.00 | 12.50 | BV444 | 4.00 |
| 0006 | 003 | 1 | 5.50 | 12.50 | BV444 | 4.00 |
因此对于相同的
订单编号
我需要将不同PaymentID的付款金额相加,并且我必须将所有数量和价格相加:
因此,对于 OrderID 002,我期望:
TotalPayments 27.00
TotalGoods 21.50
ShippingCosts 5.50
到目前为止,我的解决方案如下所示:
declare @OrderID nvarchar(10)='0002'
select distinct
paymentAmount,
sum (quantitypurchased*currentprice) over (partition by OID) TotalGoods
from
Sales s
where
OrderID = @OrderID
和
declare @OrderID nvarchar(10) = '0002'
select distinct
sum(paymentAmount) over () TotalPayments,
sum (quantitypurchased * currentprice) over (partition by OID) TotalGoods
from
Sales s
where
OrderID = @OrderID
问题是第一个解决方案没有返回总数,尽管有正确的数字来计算它。
但主要问题是返回超过 1 行,而为了进一步处理,我需要将总货物和总付款放在一行中
虽然第二个返回一行中的总数,但 TotalPayments 是错误的,因为值被添加了超过 1 次。
而且我很确定这可以通过更多的技能“轻松”实现..
可以帮忙吗?
【问题讨论】:
标签: sql sql-server