2015-10-07 253 views
0

選擇查詢我有這個疑問:需要幫助的SQL Server

SELECT * 
FROM 
    (SELECT 
     *, 
     ROW_NUMBER() OVER (ORDER BY sort_by) as row 
    FROM table_name) a 
WHERE 
    row > start_row AND row <= limit_row 

該查詢將從table_name選擇任何內容,從start_row開始直到limit_row,結果將安排由sort_by列。我也需要添加條件WHERE column_name = column_value。並且由sort_by列安排的數據可以按升序或降序排列。

我的問題是我應該在哪裏添加條件column_name = column_valueORDER ASC/DESC在我的查詢?

如果我的問題不清楚,請詢問。謝謝。

+0

將它添加到已存在的WHERE子句中怎麼樣? –

+0

您可以將篩選條件添加到內部查詢中。如果不是那麼你是行號已經被分配。 – shawnt00

+0

@TimBiegeleisen我添加了另一個並且在limit_row旁邊,並且在ms sql管理工作室中返回了多部分標識符「column_name」無法綁定。 – stacheldraht27

回答

1
SELECT * 
FROM 
( 
    SELECT *, 
     ROW_NUMBER() OVER (ORDER BY sort_by DESC) as row 
    FROM table_name 
    WHERE column_name = column_value 
) a 
WHERE row > start_row 
AND row <= limit_row 
ORDER BY a.row DESC 

row_number函數使用該順序來確定用於編號目的的數據順序;這意味着行號的順序對於瞭解和理解很重要,特別是在分頁數據的情況下。通常情況下,當分頁數據時,你需要你的排序,以便第1行是最新的記錄,因爲你希望你的第一頁數據是最新的;這通常意味着行號上的順序將會下降。

外部訂單隻改變返回給您的訂單,並且僅作爲顯示訂購。所以,通常情況下,如果您已經從最新到最舊的順序進行分頁,那麼順序將會上升。另外,如果您使用的是新版本的SQL Server,則他們添加了一個分頁功能,該功能比以往使用的行分頁功能性能更好(以我的經驗)。

+0

哇感謝幽靈^^ \ m /,但我沒有看到查詢更改順序ASC到DESC ?,你可以請添加?,然後生病標記你的答案 – stacheldraht27

+0

不完全確定意圖。你可以對你的內部查詢進行升序排序和外部降序排序。如果您希望完整列表按照ASC排序,但返回的列表按降序排列,那麼您可以修改ASC和DESC。 – UnhandledExcepSean

+0

這是我最後一個問題,ORDER BY sort_by和ORDER BY a.row之間有什麼不同? – stacheldraht27