我有一种情况,我将层次结构导入应用程序,其中 seq 编号在每个层次级别中必须是唯一的,并且从 110 开始(以便于后续手动插入)。之前的数据是这样的……
Level Prod Type Component Quantity Seq
1 P00210005 R NZ1500 57.90000000 120
1 P00210005 C P00210005M 1.00000000 120
2 P00210005M R M/C Operation 20.00000000 110
2 P00210005M C P00210006 1.00000000 110
2 P00210005M C P00210007 1.00000000 110
我希望 row_number() 函数生成新的序列号,但是无法按预期实现添加 10 然后乘以 10。要强制执行算术函数序列,您必须将整个 row_number() 和 partition 子句括在括号中。您只能对 row_number() 执行简单的加法和减法。
所以,我对这个问题的解决方案是
,10* ( 10+row_number() over (按级别顺序按类型 desc, [Seq] asc) ) [NewSeq]
注意括号的位置,以便在加法之后进行乘法运算。
Level Prod Type Component Quantity [Seq] [NewSeq]
1 P00210005 R NZ1500 57.90000000 120 110
1 P00210005 C P00210005M 1.00000000 120 120
2 P00210005M R M/C Operation 20.00000000 110 110
2 P00210005M C P00210006 1.00000000 110 120
2 P00210005M C P00210007 1.00000000 110 130