当前位置: 代码迷 >> Sql Server >> 求明细顺序号更新解决思路
  详细解决方案

求明细顺序号更新解决思路

热度:82   发布时间:2016-04-24 09:55:16.0
求明细顺序号更新

条件: 当billid=billid 时 , 当itemno不相同时,  vipitemno按顺序排列
表mnf_manuorderdetail
原表里面的内容:
单据ID,顺序号,归属产品顺序,物料ID,归属产品明细顺序号
billid itemno mxitemno materialid vipitemno
249 1 1 17 0
249 2 1 18 0
249 3 1 19 0
249 4 1 20 0
249 5 1 21 0
249 6 1 18 0
249 7 2 52 0
249 8 2 55 0
249 9 2 63 0
249 10 2 82 0
249 11 2 59 0
249 12 2 79 0
249 13 2 76 0
249 14 2 58 0
249 15 2 67 0
249 16 2 81 0
249 17 2 56 0
249 18 2 73 0
249 19 2 93 0
249 20 2 72 0
249 21 2 65 0
249 22 2 36 0
249 23 2 90 0
249 24 2 46 0
249 25 2 97 0
249 26 2 53 0
249 27 2 84 0
249 28 2 49 0
249 29 2 47 0
249 30 2 66 0


求结果:
billid itemno mxitemno materialid vipitemno
249 1 1 17 1
249 2 1 18 2
249 3 1 19 3
249 4 1 20 4
249 5 1 21 5
249 6 1 18 6
249 7 2 52 1
249 8 2 55 2
249 9 2 63 3
249 10 2 82 4
249 11 2 59 5
249 12 2 79 6
249 13 2 76 7
249 14 2 58 8
249 15 2 67 9
249 16 2 81 10
249 17 2 56 11
249 18 2 73 12
249 19 2 93 13
249 20 2 72 14
249 21 2 65 15
249 22 2 36 16
249 23 2 90 17
249 24 2 46 18
249 25 2 97 19
249 26 2 53 20
249 27 2 84 21
249 28 2 49 22
249 29 2 47 23
249 30 2 66 24

------解决思路----------------------
SELECT  *
FROM    ( SELECT    row_number() OVER ( PARTITION BY billid, mxitemno ORDER BY itemno ) rn ,
                    billid ,
                    itemno ,
                    mxitemno
          FROM      mnf_manuorderdetail
        ) a

------解决思路----------------------
引用:
不是很明白这个UPDATE应该如何写

更新语句可以试一下下面的sql

update mnf_manuorderdetail set vipitemno=a.rId  from (select *,row_number() over(partition by billid,mxitemno order by itemno) as rId from mnf_manuorderdetail) as a where billid=a.billid and itemno=a.itemno

最后,查询一下。
select * from mnf_manuorderdetail
  相关解决方案