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
*/
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
*/
from ta a
where not exists(select 1 from ta where form_name = a.form_name and display_level< a.display_level)
group by form_name ,form_country
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 行)
*/
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 行)
*/
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
*/
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
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
留最后一行