急急,查询SQL第20到40条的和

huang128 2010-07-06 08:34:47
请问一下,我用的是MSSQL
我写的是select top 20 convert(varchar,sum(convert(money,amount)),1) as amot from transrecord where transstatus=2 and ddid not in (select top 20 ddid from transrecord where transstatus=2 order by ddid desc)

在这边TOP 20不能取作用。请问要怎么样写才能读到第20到40条的和
...全文
286 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
huang128 2010-07-06
  • 打赏
  • 举报
回复
请问怎么用啊。
lspsoft 2010-07-06
  • 打赏
  • 举报
回复
这个是使用游标解决的最好案例!!!建议使用游标!
huang128 2010-07-06
  • 打赏
  • 举报
回复
我说了加了convert(varchar,sum(convert(money,A.amount)),1)这个对TOP不取作用啊。
will1971881 2010-07-06
  • 打赏
  • 举报
回复
完全不用那么麻烦,先取前40条,再反序取前20条:
select top(20) from (select top (40) from xxxx order by ddid desc) order by ddid asc
huang128 2010-07-06
  • 打赏
  • 举报
回复
我是的SQL2000啊。
gxingmin 2010-07-06
  • 打赏
  • 举报
回复
你用的是sql2000吗?
我现在没有sql2000环境,我用的是2005,上面我说的几个语句我都测试了,都能查询出来啊
huang128 2010-07-06
  • 打赏
  • 举报
回复
你的是可以用啊。但查出来是NULL啊。
gxingmin 2010-07-06
  • 打赏
  • 举报
回复
top在子查询里,convert(varchar,sum(convert(money,A.amount)),1) as amot 在子查询外,为什么不管用?
huang128 2010-07-06
  • 打赏
  • 举报
回复
select convert(varchar,sum(convert(money,amount)),1) as amot from transrecord where transstatus=0 and ddid between 21 and 40 这样是可以达到效果,在程序中又读不出数据啊。但在数据库查询又可以查出啊。请问是为什么啊。
gxingmin 2010-07-06
  • 打赏
  • 举报
回复
要是sqlserver2005或2008,有更简单的方法

SELECT convert(varchar,sum(convert(money,A.amount)),1) as amot  
FROM
(
SELECT TOP 40 *,
ROW_NUMBER() OVER ( ORDER BY sys_Test.st_Index ASC ) AS RowNumber
FROM transrecord where transstatus=2) A
WHERE A.RowNumber >20 AND A.RowNumber<41
huang128 2010-07-06
  • 打赏
  • 举报
回复
楼上的用再加convert(varchar,sum(convert(money,amount)),1)这个,TOP 都没有用啊。
wangqiinfo 2010-07-06
  • 打赏
  • 举报
回复
select top 20 * from (select top 40 * from table order by id asc) order by desc


先找出前40行在倒序排列,在查找前20行
myhope88 2010-07-06
  • 打赏
  • 举报
回复
将查询第20到第40条的记录放入临时表中,然后再对临时表进行统计,最后再把临时表删掉
huang128 2010-07-06
  • 打赏
  • 举报
回复
SELECT convert(varchar,sum(convert(money,b.amount)),1) as amot FROM(SELECT TOP 20 * FROM (SELECT TOP 40 * FROM transrecord where transstatus=2 ) AS a ORDER BY a.ddid desc) AS b
楼上的这个取出来是空啊。

楼上的别的查询要是加了convert(varchar,sum(convert(money,b.amount)),1)这个,TOP都不取作用啊
gxingmin 2010-07-06
  • 打赏
  • 举报
回复
上面没换行,看不太清,折行一下

SELECT convert(varchar,sum(convert(money,b.amount)),1) as amot 
FROM(
SELECT TOP 20 * FROM
(SELECT TOP 40 * FROM transrecord where transstatus=2 ) AS a
ORDER BY a.ddid desc)
AS b


yin15133902295 2010-07-06
  • 打赏
  • 举报
回复
m为上标,n为下标,例如取出第8到12条记录,m=8,n=12,Table为表名 Select Top n-m+1 * From Table Where Id>(Select Max(Id) From (Select Top m-1 Id From Table Order By Id Asc) Temp) Order By Id Asc
gxingmin 2010-07-06
  • 打赏
  • 举报
回复
SELECT convert(varchar,sum(convert(money,b.amount)),1) as amot FROM(SELECT TOP 20 * FROM (SELECT TOP 40 * FROM transrecord where transstatus=2 ) AS a ORDER BY a.ddid desc) AS b
YISUKU_LEE 2010-07-06
  • 打赏
  • 举报
回复
select top 20 * from (select top 40 * from table order by id asc) order by desc
huang128 2010-07-06
  • 打赏
  • 举报
回复
我重点是要有convert(varchar,sum(convert(money,amount)),1)这个统计啊。要是楼上的这种写法的话加这个统计,也不会取20条啊。会把全部统计出来
手抓宝 2010-07-06
  • 打赏
  • 举报
回复
select top(20) from (select top (40) from xxxx order by ddid desc) order by ddid asc

大概是这个意思,先取前40条 ,然后把这40条反序,然后取前20条。
加载更多回复(1)

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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