重复信息中case when exists 的应用...
2008-10-09 16:36
435 查看
重复信息中case when exists 的应用
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 相等,然后再加一条件,不处理的条件做大小比较。根据 大于 或 小于 可以控制为相同记录的第一条记录,或最后一条记录
如果外层 小于 里层,就是第一条,反之,就是最后一条。
例子:
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
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 相等,然后再加一条件,不处理的条件做大小比较。根据 大于 或 小于 可以控制为相同记录的第一条记录,或最后一条记录
如果外层 小于 里层,就是第一条,反之,就是最后一条。
例子:
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
相关文章推荐
- 重复信息中case when exists 的应用...
- [ORACLE] case when then else end 应用
- [ORACLE] case when then else end 应用
- mysql 实际应用场景case...when
- sql when case 根据不同 case 查询不同关联表信息
- 浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用
- 浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用
- [ORACLE] case when then else end 应用
- Case When Exists SQL
- oracle case when exists()
- oracle case when exists()
- mysql中的case when的应用
- SQL脚本 CASE...WHEN...THEN...ELSE...END 的应用
- SQL脚本 CASE...WHEN...THEN...ELSE...END 的应用
- SQL语句行列转换两种方法 case ...when 和pivot函数应用
- 浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用
- 输出,变量的使用,子查询,逻辑语句,循环,case..when..then..end多分支语句,Exists(判断存在)
- postgreSQL 应用case when的例子
- Access中类似Case when的应用
- EXISTS/NOT EXISTS CASE WHEN等使用方法