如何重置DENSE_RANK

时间:2016-03-28 23:20:38

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

我有下表

  

标识,CAT1,CAT2,可乐,COLB,

     

1,1,1 ,,

     

2,1,1 ,,

     

3,1,2 ,,

     

4,1,3 ,,

     

5,2,11 ,,

     

6,2,12 ,,

     

7,2,12 ,,

我需要从1开始为每个分组列添加一个唯一的序列号,但是当Cat1更改时它必须重置为1

我的输出应该是

  

Row,Id,Cat1,Cat2,ColA,ColB,

     

1,1,1,1 ,,

     

1,2,1,1 ,,

     

2,3,1,2 ,,

     

3,4,1,3 ,,

     

1,5,2,11 ,,

     

2,6,2,12 ,,

     

2,7,2,12 ,,

DENSE_RANK()用于提供唯一值,例如

Row= DENSE_RANK() OVER ( ORDER BY Cat2)

但是我需要它根据另一列Cat1重置自己

1 个答案:

答案 0 :(得分:4)

在Cat1上使用PARTITION BY子句:

Row = DENSE_RANK() OVER ( PARTITION BY Cat1 ORDER BY Cat2)

PARTITION BY子句会先根据你的Cat1对你的DENSE_RANK()进行分区,然后再密集排序,这正是你需要的。