id layer name
1   1    aa
2   2    bb
4   3    cc
3   4    dd
5   6    aa1
6   3    bb1
7   2    cc1
8   3    dd1
9   4    ee1
10  5    ff1
11  2    11
12  2    22
13  3    33用什么语句能取出id=4的layer值为3时,从layer的值3到下一个layer>=3时这中间的数据出来,如下表:
4   3    cc
3   4    dd
5   6    aa1
6   3    bb1
(ID=7的时候,layer=2时小于3了就终止取数据了)当id=8,layer=3取出的数据如下:
8   3    dd1
9   4    ee1
10  5    ff1
(到id=11时,layer的值小于3了)也就是按id排序取的数据当从layer=4值开始时一直到值还是>=4的时候列出来的数据,

解决方案 »

  1.   

    1 开始的id:
    select id from tab where layer=3 and id=4 2 结束的id:
    select id=min(id) from tab where layer=3 and id>4 3 结果集:
    declare @id int,@layer int
    select @id=4 , @layer=3 -- 要查询的参数
    select *
    from tab
    where 1=1
    and id >= (select id from tab where layer=@layer and id=@id) /*开始的id*/
    and id <= (select id=min(id) from tab where layer=@layer and id>@id) /*结束的id*/
      

  2.   

    select c.id, c.layer,c.name
    from table3 c,
    (
    select a.id,min(b.id) as maxID
    from table3 b,
    (
    select id,layer
    from table3
    where id=4                 --the number you need // liuyann
    ) a
    where b.id>a.id and b.layer<a.layer
    group by a.id
    ) d
    where c.id >=d.id and c.id<d.maxidsource
    id  layer   name
    1   1       aa
    2   2       bb
    3   4       dd
    4   3       cc
    5   6       aa1
    6   3       bb1
    7   2       cc1
    8   3       dd1
    9   4       ee1
    10  5       ff1
    11  2       11
    12  2       22
    13  3       33id=4
    id  layer   name
    4   3       cc
    5   6       aa1
    6   3       bb1
                
                
    id=8
    id  layer   name
    8   3       dd1
    9   4       ee1
    10  5       ff1