【问题标题】:Fetch alternate series of records in SQL Server获取 SQL Server 中的备用记录系列
【发布时间】:2026-02-05 04:05:02
【问题描述】:

我想使用 SQL Server 获取备用记录系列。

例如:

我想依次跳过前 10 条记录(1 到 10)并获取其他 10 条记录(11 到 20),然后我想跳过接下来的 10 条记录(21 到 30)并获取另外 10 条记录(31 到40)

我已经完成了如下交替行...

SELECT ROW, EmployeeID 
FROM
    (SELECT 
         ROW_NUMBER() OVER (ORDER BY EmployeeID) AS ROW, * 
     FROM Employee) A 
WHERE 
    ROW % 2 = 0

但是如果我的要求上面的逻辑将不起作用。请帮助我完成上述工作..

Linq 也将被接受

谢谢

【问题讨论】:

  • 添加具有预期输出的样本数据

标签: c# sql sql-server entity-framework linq


【解决方案1】:
SELECT ROW, EmployeeID 
FROM
    (SELECT 
         ROW_NUMBER() OVER (ORDER BY EmployeeID) AS ROW, * 
     FROM Employee) A 
WHERE 
    ((ROW - 1)/10) % 2 = 1

【讨论】:

  • 谢谢!这正是我想要的
【解决方案2】:

我已经完成了您的要求,如下所示(示例)。

从 1 到 1200 依次生成 1200 个数字,如下所示

;WITH CTE
AS
(
SELECT 1 PERIOD_SID
UNION ALL
SELECT PERIOD_SID+1 FROM CTE WHERE PERIOD_SID<1200
)
SELECT * INTO #PERIOD1 FROM CTE
OPTION(MAXRECURSION 0)

在此之后,我找到了您在查询中提到的替代号码

SELECT PERIOD_SID FROM 
(
SELECT CASE
         WHEN PERIOD_SID%10 <> 0 THEN PERIOD_SID / 10
         WHEN PERIOD_SID%10 = 0 THEN ( PERIOD_SID / 10 ) - 1
       END RNO,
       PERIOD_SID
FROM   #PERIOD1 )A
WHERE RNO%2=0

因此,如果您的查询中有序列号(如果您没有使用 rownumber 生成),则应用上述逻辑。

您的查询需要如下转换。

SELECT EMPLOYEEID
FROM  (SELECT Row_number()
                OVER (
                  ORDER BY EMPLOYEEID)AS ROW,
              *
       FROM   EMPLOYEE) A
WHERE  ( CASE
           WHEN RNO%10 <> 0 THEN RNO / 10
           WHEN RNO%10 = 0 THEN ( RNO / 10 ) - 1
         END )%2 = 0 

【讨论】:

    【解决方案3】:

    也许你可以试试这个

    SELECT ROW, EmployeeID FROM(
    SELECT ROW_NUMBER()OVER (ORDER BY EmployeeID)AS ROW,* FROM Employee)
    A WHERE ((ROW - (ROW%10))/10) % 2 = 1
    

    如果这行不通,请不要因为我没有要运行的 sql server。请在运行此查询后显示错误/结果。

    如有疑问,请询问。

    【讨论】:

    • 谢谢!但你的答案有一个小错误。所以我得到了错误的结果。请将您的答案与接受的答案进行比较。
    • 是的,当然。正如我所说,我没有 sql server 来运行它。