【发布时间】:2021-02-25 11:34:41
【问题描述】:
我有餐桌电话tblInvoice。这是我的表格,里面有一些数据。
| InvoiceNo | ItemName | Quantity | CostPrice | ItemCode | DiscountPrice | DisPresent | Amount | GrossAmount | SalePrice |
|---|---|---|---|---|---|---|---|---|---|
| INV01 | 80= BK | 10 | 30.00 | EX80= | 40.00 | 100.00 | 400.00 | 575.00 | 50.00 |
| INV01 | 80= BK | 5 | 30.00 | EX80= | 35.00 | 75.00 | 175.00 | 575.00 | 50.00 |
我的客户以不同的价格出售相同的商品。正如您在此处看到的,DiscountPrice 不同,但 ItemName 和 ItemCode 相同。售后退货时,我想减去数量。没关系,我已经完成了那部分。但问题是我想在退货后更新DiscountPesent。就像这样。想象一下,我返回 1 本书 DiscountPrice 是 40.00。不是 35.00。我只想更新第一行。不是两行。我想像这样获得 DiscountPresent。
SalePrice - DiscountPrice * Quantity = DiscountPresent
根据上表。想象一下,我从 DiscountPrice 40.00 行中减去 1 个数量。现在我的数量是 9 我想像这样获得 DiscountPresent。
50 - 40 = 10 * 9 = 90
我使用以下查询来实现这一点。有时它按预期工作。但有时DiscoutPresent 与第二行 DiscountPeresent 切换。之后那个表是这样的。
| InvoiceNo | ItemName | Quantity | CostPrice | ItemCode | DiscountPrice | DisPresent | Amount | GrossAmount | SalePrice |
|---|---|---|---|---|---|---|---|---|---|
| INV01 | 80= BK | 9 | 30.00 | EX80= | 40.00 | 75.00 | 400.00 | 575.00 | 50.00 |
| INV01 | 80= BK | 5 | 30.00 | EX80= | 35.00 | 90.00 | 175.00 | 575.00 | 50.00 |
90 来到第二排。 75 来到第一排。这是错的。我使用了以下代码。有时它按预期工作。但有时它会切换DiscountPresent。
UPDATE ps
SET DisPresent = ((i.SalePrice) - (i.DiscountPrice)) * (i.Quantity)
FROM tblInvoice ps JOIN
(SELECT i.InvoiceNo, i.DiscountPrice, i.Quantity, i.SalePrice FROM tblInvoice i
GROUP BY i.DiscountPrice, i.InvoiceNo, i.Quantity, i.SalePrice)i
ON ps.InvoiceNo = i.InvoiceNo
【问题讨论】:
-
tblInvoice的主键是什么 -
@Squirrel InvoiceId 是主键
-
那么你的更新语句应该加入
InvoiceId,子查询也应该按InvoiceId分组 -
@Squirrel 能否请您更改代码并发回给我
标签: sql ssms sql-server-2017 sql-server-2017-express