您的位置:首页 > 其它

重复信息中case when exists 的应用...

2008-10-09 16:36 274 查看
重复信息中[/b]case when exists [/b]的应用[/b][/b]

create table #a(Fname varchar(30),fqun decimal(18,2),fclass int )
create table #b ( fclass int,name varchar(30))
insert into #a
select 'a',20,1
union all
select 'a',20,2
union all
select 'a',20,3
union all
select 'B',10,1
union all
select 'B',10,2

insert into #b
select 1,'A'
union
select 2,'B'
union
select 3,'C'

select a.*,b.name from #a a inner join #b b on a.fclass = b.fclass
要求输出格式为
Fname fqun fclass name
------------------------------ -------------------- ----------- ------------------------------
a 20.00 1 A
2 B
3 C
B 10.00 1 A
2 B

-解决-
create table #a(Fname varchar(30),fqun decimal(18,2),fclass int )
create table #b ( fclass int,name varchar(30))
insert into #a
select 'a',20,1
union all
select 'a',20,2
union all
select 'a',20,3
union all
select 'B',10,1
union all
select 'B',10,2

insert into #b
select 1,'A'
union
select 2,'B'
union
select 3,'C'

---select a.*,b.name from #a a inner join #b b on a.fclass = b.fclass

select Fnane=(case when exists (select 1 from #a where a.fname = fname and fclass<a.fclass) then '' else a.fname end)
,fqun=(case when exists (select 1 from #a where a.fqun = fqun and fclass<a.fclass) then '' else ltrim(a.fqun) end)
,a.fclass
,b.name
from #a a
inner join #b b
on a.fclass =b.fclass
order by a.Fname,a.fclass

drop table #a,#b

--------------------------
a 20.00 1 A
2 B
3 C
B 10.00 1 A
2 B

这里需要注意的就是case when exists(select 1 from #a …..

这里的是一个嵌套查询,需要处理的字段里层与外层sql 相等,然后再加一条件,不处理的条件做大小比较。根据 大于 或 小于 可以控制为相同记录的第一条记录,或最后一条记录
如果外层 [/b]小于 [/b]里层,就是第一条,反之,就是最后一条[/b]。

例子:

declare @t table(F1 varchar(8),F2 varchar(8))
insert into @t values('01','a ')
insert into @t values('01','aa ')
insert into @t values('02','b ')
insert into @t values('02','bb ')
insert into @t values('02','bbb')

--select * from @t

select F1=(Case when exists (select 1 from @t where F1=a.F1 and F2<a.F2) then '' else F1 end)
,a.F2
from @t a
order by a..F1,a.F2

--Result--
------------
01 a
aa
02 b
bb
bbb
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: