2013-08-03 31 views
50

ORDER BY子句是在視圖中,內聯函數無效,派生 表,子查詢和公用表表達式,除非TOP,OFFSET 或FOR XML也被指定。ORDER BY子句是在視圖中,內聯函數,派生表,子查詢無效,和公用表表達式

我在嘗試執行以下查詢時遇到上述錯誤。任何人都可以請看看,並告訴我我在這裏做錯了什麼?

SELECT 
    * 
FROM (
    SELECT 
     Stockmain.VRNOA, 
     item.description as item_description, 
     party.name as party_name, 
     stockmain.vrdate, 
     stockdetail.qty, 
     stockdetail.rate, 
     stockdetail.amount, 
     ROW_NUMBER() OVER (ORDER BY VRDATE) AS RowNum 
    FROM StockMain 
    INNER JOIN StockDetail 
     ON StockMain.stid = StockDetail.stid 
    INNER JOIN party 
     ON party.party_id = stockmain.party_id 
    INNER JOIN item 
     ON item.item_id = stockdetail.item_id 
    WHERE stockmain.etype='purchase' 
    ORDER BY VRDATE DESC 
) AS MyDerivedTable 
WHERE 
    MyDerivedTable.RowNum BETWEEN 1 and 5 
+0

順序由應子查詢中選擇的錯誤外說 – Daniele

回答

60

你並不需要使用ORDER BY在內部查詢後WHERE子句,因爲你已經在ROW_NUMBER() OVER (ORDER BY VRDATE DESC)使用它。

SELECT 
    * 
FROM (
    SELECT 
     Stockmain.VRNOA, 
     item.description as item_description, 
     party.name as party_name, 
     stockmain.vrdate, 
     stockdetail.qty, 
     stockdetail.rate, 
     stockdetail.amount, 
     ROW_NUMBER() OVER (ORDER BY VRDATE DESC) AS RowNum --< ORDER BY 
    FROM StockMain 
    INNER JOIN StockDetail 
     ON StockMain.stid = StockDetail.stid 
    INNER JOIN party 
     ON party.party_id = stockmain.party_id 
    INNER JOIN item 
     ON item.item_id = stockdetail.item_id 
    WHERE stockmain.etype='purchase' 
) AS MyDerivedTable 
WHERE 
    MyDerivedTable.RowNum BETWEEN 1 and 5 
+15

不,你*不能*使用ORDER BY在派生表列在錯誤信息中給出的原因排序。結果集中行的順序最終由外部SELECT中的ORDER BY子句控制,而不是由OVER子句控制。的[OVER子句](http://technet.microsoft.com/en-us/library/ms189461.aspx)「指定* *邏輯順序,其中所述窗口functioncalculation執行」。它不會對結果集進行排序。 –

相關問題