所以我的问题是我的折扣数正在爆炸,因为订单对整个订单都有折扣,但我正在制作一个数据集,其中每个订单有多行来表示订单中的每个产品。折扣不是只适用于订单一次,而是为每一行添加折扣。
发生了什么
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 | c | <1>15 |
想明白了。我确实需要使用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,这只会更新每个订单的第一条记录。