如果我有order_id,当人们订购了一个以上的商品(因此是多个product_id)来计算折扣时,如何在SQL联接上停

  • 本文关键字:id 计算 product SQL order 如果 一个以 sql dataset
  • 更新时间 :
  • 英文 :


所以我的问题是我的折扣数正在爆炸,因为订单对整个订单都有折扣,但我正在制作一个数据集,其中每个订单有多行来表示订单中的每个产品。折扣不是只适用于订单一次,而是为每一行添加折扣。

发生了什么

数量金额折扣<1>
order_id product_id
1 a 1 5 0
2 a 1 5 7
2 b 1 10 7
3 a 1 5
3 b 1 10 5
3 c15

想明白了。我确实需要使用row_number((Over Partition by Order id,但如果订单有超过1个项目,我也会丢失记录。解决方案是使用CASE WHEN语句。

CASE WHEN ORDER_ROW_COUNT = 1 THEN DISCOUNT ELSE 0 END

这使我可以在不复制折扣的情况下保存记录

您加入的字段不是唯一的,因此加入将返回该订单Id的所有记录,因此折扣将应用于该订单Id中的所有记录。您需要某种区分字段。在每个订单数据集中都是唯一的。

示例:

Select *, row_number () over(partition by order_id order by order_id) as rownumber into #temp from table

这应该会给你一些图片中的东西。行号表图像

然后加入order_Id=order_Id和rownumber=1,这只会更新每个订单的第一条记录。

最新更新