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

如何在没有临时表的SQL查询中为组添加序列号

梁丘弘
2023-03-14
问题内容

我在SQL2008中创建了一个复杂的搜索查询,该查询返回按组排序的数据,并且查询本身具有分页和排序功能,但是与其返回基于分页选项的一定数量的记录,还需要返回一个设置组数(因此记录数将有所不同)。

我目前正在通过使用临时表来执行此操作(第一个临时表创建将在搜索中选择的组的列表,然后为它们编号…第二个查询将此表连接到实际表搜索…因此,它最终会运行搜索查询两次)。

我正在寻找一种使用SQL 2008中的一些新功能(不需要使用临时表)的更有效的方法。

如果我能以这样的格式获取数据,那就可以了…

Record  Group     GroupSequence
-------|---------|--------------
1       Chickens  1
2       Chickens  1
3       Cows      2
4       Horses    3
5       Horses    3
6       Horses    3

关于如何在不使用临时表的情况下在SQL 2008中通过单个查询完成此操作的任何想法?


问题答案:

样本数据

create table sometable([group] varchar(10), id int, somedata int)
insert sometable select 'Horses', 9, 11
insert sometable select 'chickens', 19, 121
insert sometable select 'Horses', 29, 123
insert sometable select 'chickens', 49, 124
insert sometable select 'Cows', 98, 1
insert sometable select 'Horses', 99, 2

Query

select
    Record = ROW_NUMBER() over (order by [Group], id),
    [Group],
    GroupSequence = DENSE_RANK() over (order by [Group])
from sometable

Output

Record               Group      GroupSequence
-------------------- ---------- --------------------
1                    chickens   1
2                    chickens   1
3                    Cows       2
4                    Horses     3
5                    Horses     3
6                    Horses     3


 类似资料:
  • 问题内容: 我的问题与此链接中发布的问题非常相似-如何在没有临时表的SQL查询中为组添加序列号 但是,我需要枚举组的出现。最终的输出是这样的: 另外,这必须在Oracle SQL中完成。有任何想法吗? 问题答案: 也许是这样的: ,并会为您提供所需的输出。

  • 问题内容: 我想添加表的两列值并按降序对其进行排序。例如: 考虑到上表,我想要一个SQL查询,它给我的结果如下: 是否有任何SQL查询来做到这一点? 问题答案: 没有用于这种水平聚合的内置函数,您可以执行以下操作:

  • 我的任务是用hibernate的数据值填充prime faces数据表。我们可以通过这个查询获取表中的所有记录 将从表雇员中获取所有记录,雇员字段有两个字段名称,以及将其转换为列表的Hibernate查询 列表=查询。list();我想将其转换为数组列表,其中包含两个字段name,age和hibernate中的所有对象 然后用 有人能举例说明吗

  • 我使用作为sql选择。现在有了要转换为QueryDSL的本机查询。它由括号中的两个OR语句组成,后跟一个应用于两个OR部分的and和查询。 我需要以下内容: 在querydsl中,我可以编写以下示例:

  • 问题内容: 我有这个查询: 我只想将其存储在临时表中,以便可以对其进行处理。如果任何人都可以仅包括在SQL Server中创建临时表的语法,那将是很好的。 我尝试了不同的方法,但是迷路了,没有得到想要的结果。 问题答案: 如果您只想在查询中创建一个临时表,以使您可以对存储到其中的结果进行某些操作,则可以执行以下操作: 在查询顶部,然后执行

  • 问题内容: 我有这样的查询- 由于将rowz = 1放入查询中,因此该查询无法正常工作?如果我只想要在嵌套后rowz = 1的结果该怎么办。 当我这样做时- 从news_article中选择unnest(string_to_array(na.news_category_id,’,’)):: int rowz; 我的桌子是- 然后它给了我这个结果- 问题答案: 这回答了您的问题: 诀窍是将数组放入一