号)

2010-12-28 5 views
0

私は私がトップ10給与号)

 SELECT Salary 
    from 
    (
     SELECT Salary, Row_Number() OVER(ORDER BY SALARY DESC) AS 'Salaries' 
     FROM User2 
    )#emp 

      WHERE Salaries <=10 

を表示するには、次のクエリを使用しますが、私はリストを取得していますTOP

を使用してでこれをうまくする必要があります9000,8000,7000,6000,5000,500,4000,3000,2000,10000として..

1000は、私が

を行うことで試してみました何をすべきか、ここ

が欠落しています私が作った何が悪い

 WHERE Salaries <10 (but 10000 is not displaying) 

は、いずれかが私に与えることができ、適切な1

+0

の給与は "引用符を必要とするのか? – u07ch

答えて

2

最初に私はあなたのリストに500を見ます。給与が数値でない場合、文字列ソートが使用されます。したがって、10000,9000,8000,7000,6000,5000,4000,3000,2000,1000となります。実際には列のデータ型を変更する必要がありますが、変換できない場合は変換関数を使用する必要があります。変換(数値(9,2)、給与)。

また、ランク機能(http://msdn.microsoft.com/en-us/library/ms176102.aspx)を使用する方が良いと思います。そしてトップ15が必要な場合は、その変更を行うだけです。

例:

SELECT Salary 
FROM 
(SELECT Salary 
    ,RANK() OVER 
    (ORDER BY SALARY DESC) AS 'RANK' From User2) Salaries 
WHERE 
Salaries.RANK <= 15 
+0

+1。給料が文字列だったという事実に気づく。プライスレス! ;) –

2

と間違って何:

SELECT TOP 10 Salary 
FROM User2 
ORDER BY Salary DESC 
+0

間違いではありませんが、Salaryが文字列であるために問題は残りました。 – Wade73

+0

@ Wade73:元の質問に明示的には記載されていませんが、あなた自身が書き留めたものです。私は最初に文字列にするためにスキーマ設計の決定に疑問を持っていなければなりません...! –

+0

私は全くあなたに同意します。ただポスターが実際にはトップ10を上回る以上のものだったということを理解していなかったことに注意してください。 – Wade73

0

あなたは物事を複雑に上のように見えます。

代わりに次の文字を入力してください。

SELECT TOP 10 Salary FROM User2 ORDER BY Salary DESC