SQL Server 2008中的排序和重新设置

SQL Server 2008中的排序和重新设置,sql,sql-server-2008,Sql,Sql Server 2008,我实际上是SQLServer2008新手,我正在尝试对表中的一个数字进行排序和重新设置。来源类似于: Row Refrec FLAG 1 5 NULL 2 4 X 3 3 NULL 4 2 NULL 5 1 Y 6 5 A 7 4 B 8 3 NULL 9 2 NULL 1

我实际上是SQLServer2008新手,我正在尝试对表中的一个数字进行排序和重新设置。来源类似于:

Row   Refrec FLAG 
1     5      NULL  
2     4      X    
3     3      NULL 
4     2      NULL 
5     1      Y     
6     5      A    
7     4      B         
8     3      NULL  
9     2      NULL 
10    1      NULL 
结果应该如下所示:

Row   Refrec FLAG SEQUENCE
1     5      NULL  NULL 
2     4      X     0
3     3      NULL  1
4     2      NULL  2
5     1      Y     0 
6     5      A     0
7     4      B     0     
8     3      NULL  1 
9     2      NULL  2
10    1      NULL  3

谢谢

看起来您想要枚举
NULL
值的序列值,将所有其他值设置为
0
。我不确定为什么第一个值是
NULL
,但这很容易修复

以下内容可能会满足您的要求:

select t.*,
       (case when flag is not null then 0
             else row_number() over (partition by seqnum - row order by row)
        end) as Sequence
from (select t.*, row_number() over (partition by flag order by row) as seqnum
      from table t
     );
如果您真的关心第一个值:

select t.*,
       (case when row = 1 then NULL
             when flag is not null then 0
             else row_number() over (partition by seqnum - row order by row)
        end) as Sequence
from (select t.*, row_number() over (partition by flag order by row) as seqnum
      from table t
     );

请解释用于生成
序列
列的逻辑。+1,尽管我认为外部查询中的行号应该从中减去一个,这也意味着
情况下,如果标志不为null,那么0
检查是多余的,因为它们始终是第一行。