首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从SQL Server中的每个类别中获取前n行,而不会在下一次调用中重复

如何从SQL Server中的每个类别中获取前n行,而不会在下一次调用中重复
EN

Stack Overflow用户
提问于 2017-11-08 21:21:28
回答 1查看 99关注 0票数 0

问题如下

我有很多分类

代码语言:javascript
运行
复制
Category 1:
    Item c-1-1
    Item c-1-2
    Item c-1-3
    Item c-1-4
    Item c-1-5
    Item c-1-6
    Item c-1-7
    Item c-1-8
    Item c-1-9
    Item c-1-10

Category 2:
    Item c-2-1
    Item c-2-2
    Item c-2-3
    Item c-2-4
    Item c-2-5
    Item c-2-6
    Item c-2-7
    Item c-2-8
    Item c-2-9
    Item c-2-10

Category 3:
    Item c-3-1
    Item c-3-2
    Item c-3-3
    Item c-3-4
    Item c-3-5
    Item c-3-6
    Item c-3-7
    Item c-3-8
    Item c-3-9
    Item c-3-10

根据一些参数,我需要从每个类别中获取n行。一旦这些项被使用,那么在下一个查询中,它应该返回前一次调用中没有使用的项。

例如

在第一轮中,如果我取每个类别的前3行。

代码语言:javascript
运行
复制
C-1-1, C-1-2, C-1-3

然后在第二个调用下一个3。

代码语言:javascript
运行
复制
C-1-4, C-1-5, C-1-6

所以在第四次执行中我需要

代码语言:javascript
运行
复制
C-1-10, C-1-1. C-1-2
C-2-10, C-2-1. C-2-2
and so on.

如何在SQL Server的单次查询中获取这些信息?使用排名,你可以得到每个类别的前3名。目前,我不得不使用临时表进行管理。有更好的解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2017-11-08 22:04:59

最简单的方法是通过cte和行号条件进行选择。

代码语言:javascript
运行
复制
DECLARE @N INT = 5;
WITH    cte
          AS (SELECT    Sector
              ,         CompanyName
              ,         ROW_NUMBER() OVER (PARTITION BY Sector ORDER BY CompanyName) RN
              FROM      guid.Companies
              WHERE     Deleted = 0
             )
    SELECT  cte.Sector
    ,       cte.CompanyName
    FROM    cte
    WHERE   RN < @N;

这将为您提供基本的详细信息,但是,为了获得一组不同的结果,我添加了一个已删除的列,它需要在执行后设置:

代码语言:javascript
运行
复制
WITH    cte
          AS (SELECT    Sector
              ,         CompanyName
              ,         Deleted
              ,         ROW_NUMBER() OVER (PARTITION BY Sector ORDER BY CompanyName) RN
              FROM      guid.Companies
              WHERE     Deleted = 0
             )
    UPDATE    cte
    SET     Deleted = 1
    WHERE   RN < @N

“以前运行过的”信息需要保存在某个地方。

只需插入您的表名和字段名,您就可以从这里展开。

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

https://stackoverflow.com/questions/47180830

复制
相关文章

相似问题

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