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

时间:2019-04-28 08:03:14

标签: sql scope

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

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    

现在,(从第二行开始)如果'difference'<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      

1 个答案:

答案 0 :(得分: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) +或适用于数据库的任何表达式。