有一张表,表结构、数据如下
ID Title Number
1 A 200
2 A 300
3 B 400
4 C 500
想要的结果
1 A 500
2 A 300
3 B 800
4 C 800
也就是按Title字段分组后的的Number都为800,如果Ttile存在相同的则改变小的值,使相同的两项和为800;
如结果:两项A和为800 在ID为1(Number=200)的基础上加上300,B为800,C为800,sql语句如何实现,求教,不胜感激!
------解决思路----------------------
SELECT ID,Title结合注释吧~~
,CASE WHEN RN=1 THEN 800-SumNumber+Number ELSE Number END Number
--把和800的差距加到最小的Number上面 最后一步
FROM(
SELECT ID,Title,Number
,ROW_NUMBER()OVER(PARTITION BY Title ORDER BY Number)RN --同Title组的排序,用于确定最小的Number 第一步
,SUM(Number)OVER(PARTITION BY Title)SumNumber --同Title组的和,用于确定和800差距有多少 第二步
FROM TB
) CTE