日期:2014-05-16  浏览次数:20631 次

求教一个sql写法
表A                                                                   表B
客户       商品                                                  客户       付款
客户A     商品A                                               客户A     1000
客户A     商品B                                               客户B     2000
客户A     商品C
客户B     商品A
客户B     商品D
客户C     商品B
客户C     商品C
客户C     商品E

想要得出如下结果:
客户       商品         付款
客户A     商品A      1000
客户A     商品B  
客户A     商品C
客户B     商品A      2000
客户B     商品D
客户C     商品B
客户C     商品C
客户C     商品E

求教要如何写?
------解决方案--------------------
思路
1)每个客户给个序号
2)left join 通过客户+序号
------解决方案--------------------

select a.客户, a.商品,isnull(b.付款  ,'') as 付款 
from 表A a left join 
(
select x.客户,MIN(x.商品) as 商品,y.付款 from 表A x ,(select 客户,付款 from 表B) y
 where x.客户=y.客户 
 group by x.客户,y.付款
) b on a.客户=b.客户 and a.商品=b.商品