单号 序号 物料代码 数量
P0001 1 TT.0001 100
P0001 2 TT.002 1003
P0001 3 TT.0003 678
P0001 TT.004 666
P0001 TT.005 777
P002 TT.001 555
P002 TT.002 777
P003 1 TT.001 666
P003 TT.002 99
P003 TT.002 888
这是错误的数据如何通过SQL脚本做数据处理 根据单号分组,自动把序号填写进去。如下:单号 序号 物料代码 数量
P0001 1 TT.0001 100
P0001 2 TT.002 1003
P0001 3 TT.0003 678
P0001 4 TT.004 666
P0001 5 TT.005 777
P002 1 TT.001 555
P002 2 TT.002 777
P003 1 TT.001 666
P003 2 TT.002 99
P003 3 TT.002 888

解决方案 »

  1.   

    --> 测试数据:#
    if object_id('tempdb.dbo.#') is not null drop table #
    create table #(单号 varchar(8), 序号 int, 物料代码 varchar(8), 数量 int)
    insert into #
    select 'P0001', 1, 'TT.0001', 100 union all
    select 'P0001', 2, 'TT.002', 1003 union all
    select 'P0001', 3, 'TT.0003', 678 union all
    select 'P0001', null, 'TT.004', 666 union all
    select 'P0001', null, 'TT.005', 777 union all
    select 'P002', null, 'TT.001', 555 union all
    select 'P002', null, 'TT.002', 777 union all
    select 'P003', 1, 'TT.001', 666 union all
    select 'P003', null, 'TT.002', 99 union all
    select 'P003', null, 'TT.002', 888;with cte as
    (
    select n = row_number()over(partition by 单号 order by getdate()), * from #
    )
    update cte set 序号=nselect * from #/*
    单号     序号        物料代码 数量
    -------- ----------- -------- -----------
    P0001    1           TT.0001  100
    P0001    2           TT.002   1003
    P0001    3           TT.0003  678
    P0001    4           TT.004   666
    P0001    5           TT.005   777
    P002     1           TT.001   555
    P002     2           TT.002   777
    P003     1           TT.001   666
    P003     2           TT.002   99
    P003     3           TT.002   888
    */