1

これは私のクエリです:

select * from   
(select name,empID,salary,[deducted salary] = salary-7000 from tblEmpDetails   
order by Joined_Date) TmpTbl where [decucted salary] > 50000

エラーが発生していました:

The ORDER BY clause is invalid in views, inline functions, derived tables,   
subqueries, and common table expressions, unless TOP or FOR XML is also specified.

次に、クエリを次のように変更しました。

select * from   
(select TOP 100 PERCENT name,empID,salary,[deducted salary] = salary-7000   
from tblEmpDetails order by Joined_Date) TmpTbl where [decucted salary] > 50000 

現在、正常に動作しています。
私のクエリは TOP 100 を使用していますが、正しい方法ですか、それとも他の回避策がありますか?

4

1 に答える 1

5

外側のクエリで ORDER BY が必要だったでしょう。

select name,empID,salary,[deducted salary] from   
(select name,empID,salary,[deducted salary] = salary-7000, Joined_Date
   from tblEmpDetails   
) TmpTbl where [decucted salary] > 50000
order by Joined_Date

EDIT - はい、内側のクエリに Joined_Date を含めて、外側のクエリでソートする必要があります*

ただし、クエリを 1 つのレベルで記述することもできます

  select name,empID,salary,[deducted salary] = salary-7000
    from tblEmpDetails
   where salary-7000 > 50000
order by Joined_Date

salary-7000クエリで繰り返されますが、SQL Server によって評価されるのは1 回だけであることに注意してください。

于 2013-05-08T04:38:34.003 に答える