假设以下一个表,有A这么一个物品,单价(UNIT_PRICE)的基准是100,SELL_NUM是这个物品的销售数量,假设A这个物品在一组ID内最多只能销售出三个,且销售第一个时候,可以以基准价格100来售卖,但在售出第二个和第三个时候价格只允许是上一个的60%,即1000.6、1000.6*0.6,超出的数量需乘上单价,作违规金额填入EXCEED_AMOUNT这一列里面,其中,如果第一到第三个中超出基准定价标准的金额部分也需要乘上相应的数量填入EXCEED_AMOUNT这一列里面,我个人思路是用ROWNUMBER OVER、SUM OVER和CASE WHEN条件判断函数来达到目的,但在处理CASE WHEN函数的时候,就蒙圈了,个人写的代码如下,请教各位怎样能进一步去编写这个代码
WITH A AS
(SELECT M.*,
SUM(M.NUM) OVER(PARTITION BY M.ID ORDER BY M.UNIT_PRICE DESC, M.GN) SN
FROM (SELECT T2.ID,
T2.UNIT_PRICE,
sum(T2.SELL_NUM) NUM,
ROW_NUMBER() OVER(PARTITION BY T2.ID ORDER BY T2.UNIT_PRICE DESC) GN
FROM TEST_TABLE T2
GROUP BY T2.ID, T2.UNIT_PRICE) M)
SELECT A.ID,
A.ITEM,
A.UNIT_PRICE,
A.SELL_NUM,
(CASE WHEN
ELSE
END) EXCEED_AMOUNT
FROM A