Create Table #Test (
ID Int Primary Key Identity,
Category VarChar(100)
)
Insert into #Test
(Category)
Values
('Banana'),
('Banana'),
('Banana'),
('Banana'),
('Banana'),
('Banana'),
('Strawberry'),
('Strawberry'),
('Strawberry'),
('Banana'),
('Banana')
Select
*
,ROW_NUMBER() Over (Partition by Category order by ID) as RowNum
From #Test
Order by ID因此,这个脚本返回如下:
ID Category RowNum
1 Banana 1
2 Banana 2
3 Banana 3
4 Banana 4
5 Banana 5
6 Banana 6
7 Strawberry 1
8 Strawberry 2
9 Strawberry 3
10 Banana 7
11 Banana 8这是完全合理的,除了我希望它返回这个:
ID Category RowNum
1 Banana 1
2 Banana 2
3 Banana 3
4 Banana 4
5 Banana 5
6 Banana 6
7 Strawberry 1
8 Strawberry 2
9 Strawberry 3
10 Banana 1
11 Banana 2当它碰到一组新的香蕉时,我要它重新开始计数。显然,我的数据不是真正的香蕉,但它使它很容易可视化。
香蕉的这种重复被认为是新的,所以当我们看到这个的时候,我们想从一个开始计数。我一直在绞尽脑汁,想不出一个好办法。我明白为什么它不起作用,但我想不出办法让它起作用。对最好的方法有什么建议?
发布于 2015-08-10 22:59:56
有几种不同的方法来处理这个问题。一种方法是row_number()方法的不同。此方法将识别相同的相邻类别组:
Select t.*,
row_number() over (partition by grp, category order by id) as rownum
From (select t.*,
(row_number() over (order by id) -
row_number() over (partition by category order by id)
) as grp
from #Test t
) t
Order by ID;您还可以使用lag()确定分组,但这将在Server 2005和2008以及更新的版本中使用。
https://stackoverflow.com/questions/31930105
复制相似问题