日期:2014-05-18  浏览次数:21200 次

inner join 重复记录如何处理。
这是现在用inner   join连接两个表查询出来的数据:
bh xm gz cl gzz
123 丽丽           118.5 95 a        
123 丽丽           118.5 95 b        
123 丽丽           118.5 95 c        
456 峰         3004.8 1548 a        
456 峰         3004.8 1548 b        
456 峰         3004.8 1548 c        
456 峰         3004.8 1548 d        
这是表a:
bh xm gzz
123 丽丽             a        
123 丽丽             b        
123 丽丽             c        
456 峰         a        
456 峰         b        
456 峰         c        
456 峰         d      
这是表b
bh               xm           gz                   cl
123 丽丽     118.5 95
456 峰         3004.8 1548
  我现在想要这样的结果:
bh xm gz cl gzz
123 丽丽           118.5 95 a        
123 丽丽                                 b        
123 丽丽                               c        
456 峰         3004.8 1548 a        
456 峰                           b        
456 峰                           c        
456 峰                           d  

不知道怎么实现,谢谢指教!


------解决方案--------------------
select a.bh,a.xm,(case when a.gzz= 'a ' then b.gz else ' ' end ) as gz, (case when a.gzz= 'a ' then b.cl else ' ' end ) as cl,a.gzz
from a inner join b
on a.bh=b.bh
------解决方案--------------------
如果gzz列不固定。可以这样
select a.bh,a.xm,(case when not exists (select 1 from a c where a.gzz> c.gzz) then b.gz else ' ' end ) as gz, (case when not exists (select 1 from a c where a.gzz> c.gzz) then b.cl else ' ' end ) as cl,a.gzz
from a inner join b
on a.bh=b.bh
------解决方案--------------------
select b.*,a1.gzz from a a1,b
where a1.bh=b.bh
and not exists (select 1 from a
where bh=a1.bh and gzz <a1.gzz
)
union all
select bh,xm,null as gz,null as cl,gzz
from a a2
and exists (select 1 from a
where bh=a2.bh and gzz <a2.gzz
)