私は従業員のテーブルを持っています。 EmployeeName(varchar(100))とSalaryフィールド(deciaml)があります。すべてのレコードがソートされた順番であり、私は第11番目の従業員から20番目の従業員までレコードを取得しようとしていました。私はこのデータを得るための複数の単純な方法があることを知っています。私は3〜4種類の方法でそれをやっています。しかし、私が試した方法の1つは動作していませんし、予期しないデータを再試行します。SQLサーバーでTOPが予期しない行を返す
データスクリプト:レコードをフェッチする
declare @counter int = 1
while(@counter <= 50)
begin
insert into Employee (name,salary) select CONCAT('name - ',@counter),100*@counter;
set @counter += 1;
end
Select * from Employee
問合せ:
select top(10) * from (
Select Top(20)* from Employee
) as t order by t.id desc
説明:以下は、私が使用しているスクリプトですまず、私は最初の20人の従業員のレコードを取得していますが、 TOP(20)を使用します。それから、20人の従業員のデータを降順で注文し、次にTOP(10人)の従業員を取得しようとしています。それは、私が従業員を11-20から返すことを想定していた(descinduingまたはascindingの任意の順序で)。しかし、それは50-41から従業員を返します。どうして?
を。それは20項目を返す可能性があります。 –
ORDER BYなしでTOPを使用しないでください。 –
@SamKuhmonenありがとうサミ、今私はそれが私のクエリで間違っている。 – sunil20000