繁体   English   中英

使用SQL使用Row_Number()使用行号更新表

[英]Update table with line number using Row_Number() using SQL

我在wrntybank_table中有这组数据:

doc_no   doc_lineno  stk_code  stk_lineno  serial_no  warranty_no
doc1        NULL        ABC         NULL      ABC1       WRN1
doc1        NULL        ABC         NULL      ABC5       WRN5
doc1        NULL        DEF         NULL      ABC2       WRN2
doc2        NULL        ABC         NULL      ABC3       WRN3
doc4        NULL        HJI         NULL      ABC4       WRN4
doc4        NULL        HJI         NULL      ABC6       WRN6

我想更新此表并用数字填充doc_lineno&stk_lineno列,如下所示:

doc_no   doc_lineno  stk_code  stk_lineno  serial_no  warranty_no
doc1        1        ABC         1      ABC1           WRN1
doc1        1        ABC         2      ABC5           WRN5
doc1        2        DEF         1      ABC2           WRN2
doc2        1        ABC         1      ABC3           WRN3
doc4        1        HJI         1      ABC4           WRN4
doc4        1        HJI         2      ABC6           WRN6

如何在两列中使用此代码。

with toupdate as (
          select Document,
                 10 * row_number() over (partition by Document order by (select NULL)) as val
          from t
         )
update toupdate
    set line_num = val;

注意:对于doc_lineno,相同doc_no中相同stk_code的编号保持不变,并将在stk_code和doc_no上重置。 对于stk_lineno,数字将在比较时重置。 stk_code

假设该表具有标识col来标识每一行。

with cte (id, dln, sln)
as
(
   select id, dense_rank() over (partition by doc_no order by stk_code asc) as dln
      , row_number() over (partition by doc_no, stk_code order by serial_no asc) as sln
   from @t_test
)
update @t_test
set doc_lineno = cte.dln
   , stk_lineno = cte.sln
from @t_test as t
inner join cte as cte
on t.id = cte.id
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM