当前位置: 代码迷 >> Sql Server >> SQL语句的实现方法解决思路
  详细解决方案

SQL语句的实现方法解决思路

热度:95   发布时间:2016-04-24 09:10:43.0
SQL语句的实现方法
有一张表,表结构、数据如下
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
结合注释吧~~
  相关解决方案