我看没人回答我再上。
十载专注成都网站制作,成都定制网站,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于成都定制网站,高端网页制作,对房屋鉴定等多个方面,拥有丰富的网站营销经验。
-----------------------------
这个用子查询就可以了!如果嵌套很多,证明你的数据库设计很蹩脚。
给你个例子:
----------
SELECT TOP 10
convert(varchar(10),K.ID) as ID,
convert(varchar(20),convert(decimal(18,2),K.SumRealSaleCost)) as SumRealSaleCost,
K.CountRes
from
(
select
ROW_NUMBER() OVER (ORDER BY GetDate()) AS ID,
(sum(M.Sale) over()-sum(M.ReturnSaleCost) over()) as SumRealSaleCost,
count(*) over() as CountRes
from
(
---这里你爱用什么聚合函数就用什么聚合函数,我只用了一个简单的子查询而已!
select
A.Sale,
A.ReturnSaleCost
from ProductStore A
) M
) K
where K.ID ?
--这个排序最好和分页函数一致。
ORDER BY K.Sale DESC
--------------------
最外层为类型转化层
中间是数据逻辑层
最内层就是集合构建层
我这种写法很多人不理解,本人原创。你百度不到!
---------------------
如果LZ数据库有功底的话,加入我的团队吧!数据库聚贤庄
存储过程:create Procedure pname
( @pageIndex int,@pageSize)
as
select * from tableName order by id
offset @pageIndex * pageSize fetch next pageSize rows only
分页:
sqlserver 在2008之前 使用 top 和 not int top 的方式来做分页
2008以后使用 row_number() 函数作为分页关键函数
2012使用 offset 1 fetch next 10 rows only
你问了2个问题,你可以优先把视图,存储过程,触发器等弄明白,分页是查询,在存储过程里可以写复杂的sql文,只是在运行时是预编译和参数化查询防止sql注入
sqlserver分页有四种方法,先给大家介绍一种常用的
查看1到3条数据
假如查询每页大小为3,查询第2页的数据就是
declare @iPage int --所取的页的序数 (第几页)
declare @iPageNum int --所取的数据行数(除最后一页外,每页所取的行数应该都是一样的)
declare @iRecordNumber int --取@iPage页时,结尾记录所在行数
declare @iRecordCount int --总记录行数
--变量初始化
set @iPage=1 --可用参数传递
set @iPageNum=10 --默认每页取10行
set @iRecordNumber=@iPage*@iPageNum
select @iRecordCount=count(cirDeId) from (select cirDeId from CircleDetails group by cirDeId) a
--取最后一页时,重算结尾所在行数(@iRecordNumber)、所取记录数(@iPageNum)
if @iRecordNumber@iRecordCount
begin
set @iRecordNumber=@iRecordCount
if (@iRecordNumber%@iPageNum)0
set @iPageNum=@iRecordNumber%@iPageNum
end
select * from (
select top @iPageNum * from(
select top @iRecordNumber cirDeId,
(select count(1) from CirclePost where CircleDetails.cirDeId = CirclePost.cirdeid_cp) circlepostcount
,(select count(1) from CircleAttention where CircleDetails.cirDeId = CircleAttention.cirdeid_ca) circleattentioncount
from CircleDetails group by cirDeId order by 3 desc,2 desc
) order by 3,2
) order by 3 desc,2 desc
select top 页大小 *
from table1
where id
(select max (id) from
(select top ((页码-1)*页大小) id from table1 order by id) as T
)
order by id
按照你问题的描述,你应该是sql中的一个列存的文章内容,那这个列应该就是非常非常长咯;建议你写一个函数,用截断来处理这个问题;
下面给你个demo思路,剩下的自己补
--@a 为文章内容,@page 页码,@length 单页长度
declare @int int,@a varchar(max),@page int,@length int
set @a=''
set @int=1
--假设取第一页,单页显示4000字符
set @page=1
set @length=4000
while @int5000
begin
set @a=@a+cast(@int as varchar(6))
set @int=@int+1
end
--这里显示demo的总长度和内容
select @a,DATALENGTH(@a)
--截断内容
select substring(@a,@page,@length)