2015-10-07 150 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