【问题标题】:sql query selectionsql查询选择
【发布时间】:2012-03-28 23:02:53
【问题描述】:

我正在尝试构建一个查询来执行此操作: 例如,我在表中有 100 条记录。我有调用查询的.net 表单。我有一个查询字符串参数 pageindex,类似于http://mysite.com?id=2。 我现在要做的是如果 id = NULL,则从该表中获取第一组记录,其 id 为 1 到 20,表示从 1 到 20,如果 id=2,则从第 20 行获取第二组记录到 40,如果 id=3 则从该表中获取第三组记录,即从 40 到 60 的记录。
我想知道这是否可能。 提前非常感谢,Laziale

【问题讨论】:

  • 你的当前页面是什么样的,你的数据库代码现在是什么样的?

标签: asp.net sql stored-procedures sql-server-2008-r2


【解决方案1】:

如果你按照你说的做,并且ID在1到100之间,你就可以做到

@Page 是页码(以 0 为基数)

SELECT TOP 20 * FROM MyTable WHERE (ID > @Page*20) ORDER BY ID

如果你想使用 Ms SQL 的分页风格,并且 id 不对齐你可以这样做

WITH NewTable AS (SELECT *, ROW_NUMBER() OVER (ORDER BY ID) AS RowNumber FROM MyTable)
SELECT TOP 20 * FROM NewTable WHERE (RowNumber > @Page*20)

参考: http://msdn.microsoft.com/en-us/library/ms186734.aspx

http://msdn.microsoft.com/en-us/library/ms175972.aspx

【讨论】:

    【解决方案2】:
    SELECT col1, col2 
    FROM (
        SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum
        FROM MyTable
    ) AS MyDerivedTable
    WHERE MyDerivedTable.RowNum BETWEEN @startRow AND @endRow
    

    取自Row Offset in SQL Server,首先通过“mssql 限制偏移”搜索队列在 google 中搜索结果。

    【讨论】:

    • 问题不在于 MySQL。您如何在 SQL Server 中做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多