使用Row_Number处理非唯一数据

时间:2013-07-23 13:40:17

标签: sql sql-server-2008 tsql sql-server-2012

我有4列a,b,c,d。 我的一些行对于所有列都具有相同的值,是否有任何选项可以使用row_number为这些行插入相同的行号,并且如果至少有一个值与上一行中的值不同,则继续计数

示例:

a b c d
1 1 1 1
1 1 1 1
1 1 1 2
1 1 1 2
1 1 1 3
1 1 1 3
1 1 2 4

我需要它看起来像:r = row_number

r a b c d
1 1 1 1 1
1 1 1 1 1
2 1 1 1 2
2 1 1 1 2
3 1 1 1 3
3 1 1 1 3
4 1 1 2 4

P.S。如何在这里写一个像桌子的东西?

1 个答案:

答案 0 :(得分:5)

declare @t table(a int, b int, c int, d int)
insert @t values(1,1,1,1),(1,1,1,1),(1,1,1,2),
      (1,1,1,2),(1,1,1,3),(1,1,1,3),(1,1,1,4)    
select dense_rank() over(order by a,b,c,d) r, a,b,c,d from @t

结果:

r   a   b   c   d
1   1   1   1   1
1   1   1   1   1
2   1   1   1   2
2   1   1   1   2
3   1   1   1   3
3   1   1   1   3
4   1   1   1   4