【问题标题】:SQL Query for Pagination分页的 SQL 查询
【发布时间】:2020-07-22 04:14:27
【问题描述】:

我有学生为每个课程支付的费用数据,现在我想显示未支付的费用,因为学生可能有 2018 年、2019 年和 2020 年的未支付费用待处理,因此它将有 3 行(月份将在列中)。现在由于学生是相同的,我将在前端合并记录,现在如果我考虑分页并且每页限制为 10,并且在这 10 条记录中,3 条记录属于同一学生(因为年份不同),在这种情况下,我最终将在给定页面上只有 7 条记录。

这是示例数据。

Studentname         RollNo    Year    Program     Jan  Feb  Mar  Apr  May  Jun ...
abc                 1         2018    p1          200   50   10   30   88   29
abc                 1         2019    p1          100   10   20   50   12   22
abc                 1         2020    p1          30    77   33   27   99   100
xyz                 2         2020    p2          88    29   32   99   199  200

我该如何管理上述案例的分页。

【问题讨论】:

  • “俱乐部数据”听起来像是一种不友善的行为,如果不是非法的话。我猜你打算合并这些行,例如通过对每列的值求和。如果您从 10 行开始,并将单个用户 3 年的数据合并到一行中,那么您将显示 8 行而不是 7 行。 (对于您的示例数据,您将有 2 行,而不是 1 行。)对吗?您可以使用 CTE 或 viewgroup by Studentname,然后选择数据页。性能可能是个问题。如果您按字母顺序列出它们,那么根据页面上的第一个和最后一个 Studentname 进行分页可能会很有用。
  • 是的,你是对的 8 行而不是 7 行,但我不想每年汇总,我想提一下(当年)每个月有多少待处理。我将在每一行中都有一个带有列表的网格视图,其中将显示 [月(年)] 以及它们各自的数量。
  • 好的,这是有道理的,不应该破坏任何数据。您通过每页显示PageSize 学生的数据来有效地进行分页。以这种方式接近它,并使用费用数据inner join 来收集页面所需的所有行。

标签: sql-server tsql pagination


【解决方案1】:

假设你的前端是 HTML/CSS/Javascript:

您根本不需要在查询中处理分页,甚至不需要在后端处理。一切都可以而且应该在您的前端完成。我建议使用JQueryBootstrap 创建一个分页表来使用Material Design for Bootstrap 显示您的数据

【讨论】:

  • 我正在使用 SQL 返回分页数据,因为我最终可能会得到数百万条记录,如果我在前端获取之前不分页,那么它将尝试加载之前的所有记录JS 启动并分页。所以我的页面加载会因此受到严重影响。
  • 无论哪种方式,您仍然会将所有记录加载到页面上,如果您想一次加载较少的记录,您可能想要排序并限制查询返回的行数(请参阅到this question)
猜你喜欢
  • 2012-05-24
  • 2011-08-07
  • 2013-03-03
  • 2012-08-14
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2012-12-11
  • 2015-04-29
相关资源
最近更新 更多