2016-12-15 15 views
1

SQL Serverを使用して別の一連のレコードを取得したいとします。例えばSQL Serverで代替の一連のレコードを取得する

Iは配列内の最初の10件のレコード(1〜10)をスキップして、私は次の10件のレコード(21〜30)をスキップすることを後に他の10のレコード(11〜20)を取得したいと別の次の10のレコード(31〜40)

を取得し、私は...以下のように別の行に対して

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

を行っている。しかし、論理上の私の要求の場合には動作しません。事は作品の上に私を作るために助けてください..

LINQのも、私は、以下の(例)のようなあなたの条件の上で行っている

おかげ

+0

期待される出力でサンプルデータを追加 –

答えて

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

ありがとう!これは私が欲しいものです –

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 

を記載している見つけている

この後
;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) 

以下のように1から1200に1200の数を順次生成

クエリ(あなたが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 
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を持っていけませんだって。このクエリを実行した後、エラー/結果を表示してください。

疑問があれば質問してください。

+0

ありがとう!あなたの答えには小さな間違いがあります。だから私は間違った結果を得ている。あなたの答えを受け入れられた答えと比較してください。 –

+0

ええ、確かに。私が言ったように私はこれを実行するSQL Serverを持っていない。 –

関連する問題