在SQL Server中获取备用系列记录

时间:2016-12-15 04:58:18

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

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

例如:

我想按顺序跳过前10条记录(1到10)并获得其他10条记录(11到20)之后我想跳过下10条记录(21到30)并获得另外10条记录(31条到31条记录) 40)

我已为替换行做了如下...

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

但是,如果我的要求,上面的逻辑将无法正常工作。请帮我把上面的东西搞定..

Linq也将接受

由于

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我已完成上述要求,如下所示(示例)。

从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 

答案 2 :(得分:0)

可能你可以试试这个

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。运行此查询后请显示错误/结果。

询问是否有任何疑问。