回答

收藏

ROW_Count()按顺序重新开始

技术问答 技术问答 201 人阅读 | 0 人回复 | 2023-09-14

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 RowNumFrom #TestOrder by ID因此,脚本返回以下内容:7 M: F+ f0 `- b8 O. `5 i  ?
ID  Category    RowNum1   Banana       12                     12      Banana        233                  Banana       34       34     Banana      4555                 Banana     56         56               56                  56                                                         5656                                                        565656                                                                                                      5656565656565656565656 Banana       67   Strawberry  18   Strawberry  29   Strawberry  310  Banana      711  Banana    8这是合理的,但我希望它能回到这个值:7 _- h, Y" d9 J! v9 s, \+ @
ID  Category    RowNum1   Banana       12                     12      Banana        233                  Banana       34       34     Banana      4555                 Banana     56         56               56                  56                                                         5656                                                        565656                                                                                                      5656565656565656565656 Banana      67   Strawberry  18   Strawberry  29   Strawberry  310  Banana      11111                           11111Banana     2我希望它在击中一组新香蕉时重新开始计数。显然,我的数据不是真正的香蕉,但它使可视化更容易。
- `4 k& S  ]) M( S香蕉的复发被认为是新的,所以我们希望在看到这种情况时从一个开始计数。我一直在绞尽脑汁,想不出一个好办法来做到这一点。我知道为什么它不起作用,但我想不出一种让它起作用的方法。对最好的方法有什么建议吗?
! N: }7 E& {2 a% u0 D7 C* k                                                               
3 z0 E. ^4 b* @    解决方案:                                                               
( F+ P# s  ~/ e, g( n                                                                有几种不同的方法可以解决这个问题。一种方法是方法的差异row_number()。该方法将识别相同类别的相邻组:
# Y# W# u8 x. l9 R3 GSelect t.*,      row_number() over (partition by grp,category order by id) as rownumFrom (select t.*,             (row_number() over (order by id) -              row_number() over (partition by category order by id)         as grp      from #Test t     ) tOrder by ID;也可以用来确定分组lag(),但这将是SQL Server 2005、2008和更新版本。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则