做一个测试表 
create table #t
(
  isid int primary key identity(1,1),
  amount decimal(18,2)
)
goinsert into #t values(23.43)
insert into #t values(213.43)
insert into #t values(523.3)
insert into #t values(23.4)
insert into #t values(263.23)
insert into #t values(223.43)
insert into #t values(223.43)
insert into #t values(293.43)
insert into #t values(223.3)
insert into #t values(23.16)
 
drop table #t请问 大家如何才能按照isid顺序由小到大 取到“和”小于 500的明细。此表结果就是取到前两条
就是按照顺序来取到连续数据和小于500的明细分少 请各位帮帮忙

解决方案 »

  1.   

    select * from #t as a where exists(select 1 from #t where isid<=a.isid having sum(amount)<500)
      

  2.   

    请教 roy_88   结果没问题。 完全没必要 用类似order by 之类的排序吗?
      

  3.   

    没有必要,在isid<=a.isid 这一段是条件
      

  4.   

    强,我看了四五遍还没没理解明白你给的语句。  继续学习,非常感谢 roy_88
      

  5.   

    isid<=a.isid  巧妙的排序方法。在exists里面 屡试不爽。
      

  6.   


    create table #t
    (
      isid int primary key identity(1,1),
      amount decimal(18,2)
    )
    goinsert into #t values(1023.43)
    insert into #t values(-9213.43)
    insert into #t values(523.3)
    insert into #t values(23.4)
    insert into #t values(-263.23)
    insert into #t values(223.43)
    insert into #t values(223.43)
    insert into #t values(293.43)
    insert into #t values(223.3)
    insert into #t values(23.16)
     
     select * from #t as a where exists(select 1 from #t where isid<=a.isid having sum(amount)<1000)
    drop table #t请问版主我将数据改了一下 第一条即超过了“和”,但是这个语句会继续筛选下面的语句。怎么让他停止。比如第一行>1000以后就不往下筛选了
      

  7.   

    上面说的不对不对,我的意思是
    select * from #t as a where exists(select 1 from #t where isid<=a.isid having sum(amount)<1000)
    这个代码当第一条就大于“和”的时候他不显示,怎样才能显示,显然 1023.43+(-9213.43) 小于1000