当前位置: 首页 > 面试题库 >

ROW_Count()根据顺序重新开始

袁增
2023-03-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 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

我希望它在击中一组新香蕉时重新开始计数。显然,我的数据并不是真正的香蕉,但它使可视化变得容易。

香蕉的这种复发被认为是新出现的,因此,我们希望在看到这种情况时从一个开始计数。我一直在绞尽脑汁,想不出一个好方法来做到这一点。我了解为什么它不起作用,但是想不出一种使它起作用的方法。关于最佳方法的任何建议吗?


问题答案:

有几种不同的方法可以解决此问题。一种方法是方法的差异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(),但这将在SQL Server 2005和2008以及更新版本中起作用。



 类似资料:
  • 问题内容: 可以说我有这些专栏 我想要做的就是更新和基于价值。 因此结果将是: 我希望更新操作像标识列一样,而实际上不使其成为标识列。我知道我可以按“ x”排序,结果就是顺序,但是我想生成一个报告,在这里可以逐行查看项目。 这样的事情可能吗? 问题答案: 或在单个查询中进行尝试

  • 问题内容: 我确信这个问题以前可能已经被问过,但我似乎找不到正确的答案。如果我有两个清单 我正在尝试使用_list1重新排列_list2中的元素,以便它们完全匹配顺序。什么是最干净的方法?所需的输出: 很抱歉,如果这是重复的,但到目前为止,我只能使用压缩的sorted()方法找到数字列表的答案。 如果_list2是列表列表怎么办? 所需输出: 还有一个假设:如果我想使用_list1作为键对其他任何

  • 问题内容: 如何使用Sequelize查找关系中的某个列满足条件的所有人? 一个示例是查找所有作者姓氏为“ Hitchcock”的图书。书籍架构包含与Author’s表的hasOne关系。 编辑:我了解如何使用原始SQL查询来完成,但是正在寻找另一种方法 问题答案: 这是一个有效的示例,说明如何让Sequelize 通过具有特定姓氏的来获取全部信息。它看起来比实际要复杂得多,因为我正在定义模型,将

  • 问题内容: 我在SO上看到了很多与此问题有关的问题,但都与我的情况无关。除了进行基本的CRUD操作外,我与SQL专家们无二。因此,我对此非常执着。 我有一张表。 在哪里; myTable始终总有10行。 因此,首先,假设myTable具有以下数据: 预期的功能应如下所示; 插入新 当插入新项目时,用户应该能够将其插入到他/她想要的任何位置。现在,我仅设法通过删除OrderPosition = 10

  • 我有一个webservice,当我调用该webservice时得到这个响应。 现在我要根据我在这个数组中得到的顺序对这个完整的数组进行排序?我怎样才能做到这一点呢?

  • 问题内容: 我有一个集合,一个对象(无序) 的ID 属性,一个(有序)列表 的ID 。 ID列表未排序 。我想在我的收藏夹中创建一个对象列表,并根据ID列表进行排序。 我在Guava或Apache Commons中没有看到用于此目的的方法-但这正是我想要的。具有良好实现的库函数。 问题答案: 听起来您的ID列表有自己的顺序;您不仅在使用自然顺序,对吗? 这是番石榴解决方案: 而已。没什么 (公开: