【问题标题】:Discount Present Update When Quantity Change数量变化时的折扣礼物更新
【发布时间】: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 不同,但 ItemNameItemCode 相同。售后退货时,我想减去数量。没关系,我已经完成了那部分。但问题是我想在退货后更新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


【解决方案1】:

在我看来你只需要一个简单的更新语句

UPDATE i
SET    DisPresent  = (i.SalePrice - i.DiscountPrice) * i.Quantity
FROM   tblInvoice i

如果这不是您想要的,请显示您提供的示例数据的预期结果

【讨论】:

  • 谢谢@Squirrel。我使用了主键。现在它的工作。如果我再次收到该错误,我将发送我更新的代码。感谢您的帮助
【解决方案2】:

如果您要退回任何产品,您应该只更新该发票

UPDATE ps
SET DisPresent = ((i.SalePrice) - (i.DiscountPrice)) * (i.Quantity) 
FROM tblInvoice where invoiceid=1 and itemcode='EX80='

【讨论】:

  • 谢谢@squirrel。由于我是用手机接电话,格式不好。
  • Sqquirrel 我有一个问题。 tblInvoice 是一张表。 tblReturnInvoice 是另一个表。当我将数据插入 tblReturnInvoice 表时,我想更新这个 tblnvoice 表。我在 tblInvoice 表触发器中使用它。因此,我如何根据您的回答获取 InvoiceId
  • 退货发票表中是否有发票编号?
  • 在运行此查询之前,您已经更新了 tblInvoice 表。对吗?
  • 不,我的退货发票表中没有发票 ID。根据上面的更新查询,我将加入查询更改为 ON ps.InvoiceNo = i.InvoiceNo 为 ON ps.InvoiceId = i.InvoiceId。现在它按预期工作。但有时它会显示其他行数据的负值。这意味着有时两行会同时更新。
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多