如何根据其他列的值将列的值增加1不会增加该值?

问题描述 投票:-1回答:1

我有一个列(差异)的表。

difference  tableNumber

     10    
     22    
     03    
     45    
     32    
     120   
     65    
     34    
     85    
     90    
     130   
     140   
     65    
     21    
     01    
     45    
     150   
     55    
     5000  
     87    
     43    

tableNumber的第一行将以'1'开头。

difference  tableNumber

     10          1
     22    
     03    
     45    
     32    
     120   
     65    
     34    
     85    
     90    
     130   
     140   
     65    
     21    
     01    
     45    
     150   
     55    
     5000  
     87    
     43    

现在,(从第二行开始)如果“差异”<100,则插入前一行值的“tableNumber”

否则,如果'difference'> 100,则将前一行'tableNumber'的值增加1并将其插入当前行。

编辑:示例表:( tableNumber是预期的输出)

那么,这将是预期的输出:

 difference tableNumber 

     10          1         
     22          1      
     03          1      
     45          1      
     32          1      
     120         2      
     65          2      
     34          2      
     85          2      
     90          2      
     130         3      
     140         4      
     65          4      
     21          4      
     01          4      
     45          4      
     150         5      
     55          5      
     5000        6      
     87          6      
     43          6      
sql scope
1个回答
0
投票

SQL表表示无序集。您想要做什么似乎取决于行的顺序。我假设你有一个指定排序的列。我们称之为ord

我认为以下基本上做你想要的:

select difference,
       1 + sum(case when difference < 100 then 0 else 1 end) over (order by ord) as tablenumber
from t;

这没有考虑表中的第一个“1”。但是,这对于您真正想要解决的问题来说似乎是多余的(识别值小于100的相邻组)。

如果这很重要,你可以用1 +替换(select difference from t order by ord fetch first row only) + - 或者任何适合你的数据库的表达式。

© www.soinside.com 2019 - 2024. All rights reserved.