求分页取数据技巧

showjancn 2011-05-03 02:38:56
下面的例子只是打个比方:
有组织机构(部门):
A部门 (10人)
+ A-1部门(20人)
+ A-2部门(25人)
+ A-2-1部门(30人)
+ A-2-2部门(30人)
B部门(20)

上面的意思为:
A部门有A-1和A-2两个子部门,A-2有A-2-1和A-2-2两个子部门。
每个部门都有(0至N个人员)

其中部门表的结构类似
Id Name ParnetId,分别表示自身ID,名称和上级ID。

人员表结构类似
Id Name DeptId,分别表示自身ID,名称和所属部门ID。

现在取人员显示,要求分页,先按部门先后取数据,有子部门的,子部门优先于兄弟部门。

如果每页显示40个人,那么
第一页的数据要求为:
A部门(10)A-1部门(20) A-2(10)
第二页为:
A-2(15)A-2-1(25)
第三页为:
A-2-1(5) A-2-2(30) B部门(5)
第四页为:
B(15)

请问有没有办法使用Sql语句来实现?
...全文
57 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wllllll 2011-05-03
  • 打赏
  • 举报
回复

SELECT TOP 20/*这里是显示多少数据*/ *
FROM [Table]
WHERE (
(CASE [IsPeak] WHEN 1 THEN -1 ELSE 1 END) * [Id] + ISNULL([IsHide], 0) * 999999 >= (
SELECT MAX([ArrId]) FROM (
SELECT TOP 1/*这里就是从地几开始*/ (CASE [IsPeak] WHEN 1 THEN -1 ELSE 1 END) * [Id] + ISNULL([IsHide], 0) * 999999 AS [ArrId] FROM [Table]
WHERE [Module] = @Module AND Belong = @Belong AND ISNULL([IsDelete], 0) = @IsDelete
ORDER BY (CASE [IsPeak] WHEN 1 THEN -1 ELSE 1 END) * [Id] + ISNULL([IsHide], 0) * 999999 ASC
) AS [MaxId]
)
)
AND [Module] = @Module AND Belong = @Belong AND ISNULL([IsDelete], 0) = @IsDelete
ORDER BY (CASE [IsPeak] WHEN 1 THEN -1 ELSE 1 END) * [Id] + ISNULL([IsHide], 0) * 999999 ASC




看我的, 我的这个东西的意思是IsHide为1,那么排序到最末, IsPeak为1, 排序最前

你只要排序方式就可以了
我的排序:
(CASE [IsPeak] WHEN 1 THEN -1 ELSE 1 END) * [Id] + ISNULL([IsHide], 0) * 999999

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧