现在有数据如下
CA CB CC
1  A  1
1  B  2
1  C  3
1  D  4
1  E  5
1  F  6
1  G  7
2  A  7
2  B  6
2  C  5
2  D  4
2  E  3
2  F  2
2  G  1
3  C  1
3  J  2
3  H  3
4  C  3
4  J  2
4  H  1现在参数是CB = 'C'
想得到的结果是 所有CC的值都大于CB = 'C'时的CC值的集合(如果本身是最大的了就不显示,如CB='C'时 4 C 3 它在CA=4中的话3是最大了所有就不需要这条记录)
CA CB CC
1  C  3
1  D  4
1  E  5
1  F  6
1  G  72  A  7
2  B  6
2  C  53  C  1
3  J  2
3  H  3

解决方案 »

  1.   

    LZ用这个试试select * from tb
    where CB>='C' and not exists
    (
      select 1 from
      (
        select MAX(CC)as MaxCC,CA from tb  where CB>='C' group by CA
      ) as b
      where  b.Maxcc=tb.CC and b.CA=tb.CA
    )
      

  2.   


    --> 测试数据: [tb]
    if object_id('[tb]') is not null drop table [tb]
    create table [tb] (CA int,CB varchar(1),CC int)
    insert into [tb]
    select 1,'A',1 union all
    select 1,'B',2 union all
    select 1,'C',3 union all
    select 1,'D',4 union all
    select 1,'E',5 union all
    select 1,'F',6 union all
    select 1,'G',7 union all
    select 2,'A',7 union all
    select 2,'B',6 union all
    select 2,'C',5 union all
    select 2,'D',4 union all
    select 2,'E',3 union all
    select 2,'F',2 union all
    select 2,'G',1 union all
    select 3,'C',1 union all
    select 3,'J',2 union all
    select 3,'H',3 union all
    select 4,'C',3 union all
    select 4,'J',2 union all
    select 4,'H',1--开始查询
    ;with cte as(
    select * from [tb] where CB='C'
    )
    select * from tb a where exists(
    select 1 from cte where CA=a.CA and CC<=a.CC
    )--结束查询
    drop table [tb]/*
    CA          CB   CC
    ----------- ---- -----------
    1           C    3
    1           D    4
    1           E    5
    1           F    6
    1           G    7
    2           A    7
    2           B    6
    2           C    5
    3           C    1
    3           J    2
    3           H    3
    4           C    3(12 行受影响)
      

  3.   

    我觉得LZ说的(如果本身是最大的了就不显示,如CB='C'时 4 C 3 它在CA=4中的话3是最大了所有就不需要这条记录)这一句满坑爹的,就不管了
    LZ实际要这个要求,就先查出来再按这个要求删掉不符合的C=3的行吧。
    一句查成你带括号的要求我暂时没想到好方法
      

  4.   

    直接
    select * from tb t where cb='c and exists(select 1 from cte where CA=t.CA and cb='c' and CC<=t.CC)
      

  5.   

    select * from tb t where cb='c' and exists(select 1 from cte where CA=t.CA and cb='c' and CC<=t.CC)