商品单价分摊拆分

scxs 2017-07-21 02:33:50
需求:由于天猫上的商品存在一种组合产品,这种组合产品有可能是2个组合成一个,也可能是3个组合成一个。组合商品的价格会比单独买每个商品的总价优惠。因此拆分时差价统一采用在组合商品中最高价的商品上扣,当最高的不够扣后,才会去扣第二个商品,依次类推。
举例1:A,B,C三个商品A 1元,B 50元,C 100元;三个组合购买时是140元。那么拆分后的结果 A 1元,B 50元,C 89元。举例2:D,E,F三个商品都是10元;组合购买时2元。拆分后金额:D0元,E 10元,F1 0元。
麻烦给个SQL的分摊列子,谢谢
...全文
248 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-07-21
  • 打赏
  • 举报
回复
楼主没说表结构,随便写的,楼主参考吧
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([name] nvarchar(21),[price] int)
Insert #T
select N'A',1 union all
select N'B',50 union all
select N'C',100
Go
--测试数据结束
DECLARE @allpprice INT = 140 --组合钱数
Select @allpprice=SUM(price)-@allpprice from #T --应少的钱数,这个应该是关联查询出来的
;WITH ctea AS (
SELECT *,ROW_NUMBER()OVER(ORDER BY price DESC) AS num FROM #T
),cteb AS (
SELECT name ,
CASE WHEN price - @allpprice >= 0 THEN price - @allpprice
ELSE 0
END AS price ,
price - @allpprice tempprice,
num
FROM ctea
WHERE num = 1
UNION ALL
SELECT ctea.name ,
CASE WHEN tempprice > 0 THEN ctea.price
ELSE ( CASE WHEN ctea.price + tempprice > 0 THEN ctea.price + tempprice
ELSE 0
END )
END AS price,
ctea.price + tempprice AS tempprice,
ctea.num
FROM ctea
JOIN cteb ON cteb.num + 1 = ctea.num
)
SELECT name,price FROM cteb

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧