create table form_tb(form_id int identity,form_name varchar(30),form_country varchar(30),display_level int) 
go 
insert into form_tb select '饼干','中国',3 
insert into form_tb select '饼干','中国',2 
insert into form_tb select '稻谷','倭寇',3 
insert into form_tb select '小麦','美国',2 
/*
1 饼干 中国 3
2 饼干 中国 2
3 稻谷 倭寇 3
4 小麦 美国 2
*/查询的条件是当一行字段display_level值为3时,如果form_name和form_country的值在display_level值为2的行有相同的就过滤掉,否则显示所有如上表:第一行display_level值为3,但是它的form_name和form_country和第二行相同,并且第二行的display_level为2,所以过滤掉第一行,
结果应该为:
/*
2 饼干 中国 2
3 稻谷 倭寇 3
4 小麦 美国 2
*/

解决方案 »

  1.   

    select *
    from ta a
    where not exists(select 1 from ta where form_name = a.form_name and display_level< a.display_level)
      

  2.   

    select form_name ,form_country ,min(display_level ) from form_tb
    group by form_name ,form_country
      

  3.   

    create table form_tb(form_id int identity,form_name varchar(30),form_country varchar(30),display_level int)  
    go  
    insert into form_tb select '饼干','中国',3  
    insert into form_tb select '饼干','中国',2  
    insert into form_tb select '稻谷','倭寇',3  
    insert into form_tb select '小麦','美国',2  select * from form_tb t where display_level = 3 and not exists(select 1 from form_tb where form_name = t.form_name and form_country = t.form_country and display_level = 2 )
    union all
    select * from form_tb t where display_level = 2
    order by form_iddrop table form_tb/*
    form_id     form_name                      form_country                   display_level 
    ----------- ------------------------------ ------------------------------ ------------- 
    2           饼干                             中国                             2
    3           稻谷                             倭寇                             3
    4           小麦                             美国                             2(所影响的行数为 3 行)
    */
      

  4.   

    create table form_tb(form_id int identity,form_name varchar(30),form_country varchar(30),display_level int)  
    go  
    insert into form_tb select '饼干','中国',3  
    insert into form_tb select '饼干','中国',2  
    insert into form_tb select '稻谷','倭寇',3  
    insert into form_tb select '小麦','美国',2  
    goselect * 
    from form_tb a 
    where not exists(select 1 from form_tb where form_name = a.form_name and display_level < a.display_level)
    drop table form_tb/*
    form_id     form_name                      form_country                   display_level 
    ----------- ------------------------------ ------------------------------ ------------- 
    2           饼干                             中国                             2
    3           稻谷                             倭寇                             3
    4           小麦                             美国                             2(所影响的行数为 3 行)
    */
      

  5.   

    select * from form_tb as t where display_level<>3 or (display_level=3 and not exists (select 1 from form_tb where form_name=t.form_name and form_country=t.form_country and display_level<>3))
      

  6.   

    create table form_tb(form_id int identity,form_name varchar(30),form_country varchar(30),display_level int) 
    go 
    insert into form_tb select '饼干','中国',3 
    insert into form_tb select '饼干','中国',2 
    insert into form_tb select '稻谷','倭寇',3 
    insert into form_tb select '小麦','美国',2 
    /*
    1 饼干 中国 3
    2 饼干 中国 2
    3 稻谷 倭寇 3
    4 小麦 美国 2
    */select * from form_tb as t where display_level<>3 or (display_level=3 and not exists (select 1 from form_tb where form_name=t.form_name and form_country=t.form_country and display_level<>3))/*
    2 饼干 中国 2
    3 稻谷 倭寇 3
    4 小麦 美国 2
    */ 
      

  7.   

    create table form_tb(form_id int identity,form_name varchar(30),form_country varchar(30),display_level int)  
    go  
    insert into form_tb select '饼干','中国',3  
    insert into form_tb select '饼干','中国',2  
    insert into form_tb select '稻谷','倭寇',3  
    insert into form_tb select '小麦','美国',2  
    /* 
    1 饼干 中国 3 
    2 饼干 中国 2 
    3 稻谷 倭寇 3 
    4 小麦 美国 2 
    */ select form_name,form_country,
    (select top 1 a.display_level from form_tb as a 
    where a.form_name=form_tb.form_name and a.form_country=form_tb.form_country order by form_id asc) as display_level
     from form_tb
    group by form_name,form_country
    order by form_name,form_country
      

  8.   

    上面为留第一行
    create table form_tb(form_id int identity,form_name varchar(30),form_country varchar(30),display_level int)  
    go  
    insert into form_tb select '饼干','中国',3  
    insert into form_tb select '饼干','中国',2  
    insert into form_tb select '稻谷','倭寇',3  
    insert into form_tb select '小麦','美国',2  
    /* 
    1 饼干 中国 3 
    2 饼干 中国 2 
    3 稻谷 倭寇 3 
    4 小麦 美国 2 
    */ select form_name,form_country,
    (select top 1 a.display_level from form_tb as a 
    where a.form_name=form_tb.form_name and a.form_country=form_tb.form_country order by form_id desc) as display_level
     from form_tb
    group by form_name,form_country
    order by form_name,form_country
    留最后一行