首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROW_Count()根据订单重新开始

ROW_Count()根据订单重新开始
EN

Stack Overflow用户
提问于 2015-08-10 22:17:10
回答 1查看 145关注 0票数 9
代码语言:javascript
复制
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

因此,这个脚本返回如下:

代码语言:javascript
复制
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

这是完全合理的,除了我希望它返回这个:

代码语言:javascript
复制
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

当它碰到一组新的香蕉时,我要它重新开始计数。显然,我的数据不是真正的香蕉,但它使它很容易可视化。

香蕉的这种重复被认为是新的,所以当我们看到这个的时候,我们想从一个开始计数。我一直在绞尽脑汁,想不出一个好办法。我明白为什么它不起作用,但我想不出办法让它起作用。对最好的方法有什么建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-10 22:59:56

有几种不同的方法来处理这个问题。一种方法是row_number()方法的不同。此方法将识别相同的相邻类别组:

代码语言:javascript
复制
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以及更新的版本中使用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31930105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档