在做一个数据统计的时候,要把一个表的数据进行group by,并且是进行分页的,单条SQL语句无法返回一页的结果集(只能返回整个表的结果集),因此现在有两种方法,一种是在存储过程里将所有数据查询出来,然后筛选出当前页的数据插入到一张临时表里,只要读取这张临时表就能读出当前页数据,读取完后删除临时表。另外一种方法是将整张表的数据用ADO.NET全部读出,然后在.NET环境里对数据进行分组和当前页数据的筛选。两种方法都要把整张表读出,只不过一种直接在SQL里,另外一种把整表返回到.net环境里,但是在SQL SERVER里多了一个删除临时表的操作,频繁的新建和删除表,会不会很消耗服务器资源?那种方法更好?
``谁跟你说"单条SQL语句无法返回一页的结果集(只能返回整个表的结果集)"的?
SELECT GoodsId,SUM(GoodsQty) AS SalesCount,SUM(GoodsAmount)
AS SalesTotal
FROM dbo.od_OrderItem
GROUP BY GoodsId
ORDER BY SUM(GoodsQty) DESC
这条数据返回的是整张表group by组合之后的所有数据,怎么根据当前页码pageIndex筛选出当前页数据,你能实现,我就佩服你了
@ludi: 你不知道子查询吗?而且分页查询本来就都是子查询吧?
select * from (
select *,row_number() over(order by SalesCount)as rownumber from (
SELECT GoodsId,SUM(GoodsQty) AS SalesCount,SUM(GoodsAmount)
AS SalesTotal
FROM dbo.od_OrderItem
GROUP BY GoodsId) t) t1 where t1.rownumber>1 and t1.rownumber<20
要是觉得效率低可以看看下执行计划
这样不行?
@吴瑞祥: 对,做个比较子查询就ok了,很简单的逻辑
哥,你的需求简单说说。UI上要怎么反应?
用这个试试
http://www.cnblogs.com/humble/p/3644516.html
那就组合查询呗,一条语句应该可以做到的