SQL Server 2008中的排序和重新设置
我实际上是SQLServer2008新手,我正在尝试对表中的一个数字进行排序和重新设置。来源类似于: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
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
检查是多余的,因为它们始终是第一行。