客户表
cCstId cCstName
01001 A
01002 B
客户汇总表
iYear iMonth cCstId iBeSum iOutSum iClOuSum iNotGive
2014 7 01001 0 1000 500 500
2014 7 01002 100 800 300 600
出货表
iYear iMonth cCstId iSuAmt cMemo
2014 7 01001 100
2014 7 01002 200
2014 7 01001 300
2014 7 01001 400
2014 7 01002 600
2014 7 01001 200
来款表
iYear iMonth cCstId iSuAmt cMemo
2014 7 01001 200
2014 7 01002 300
2014 7 01001 300
需要查询的结果
iYear iMonth cCStId iBeSum iOutSum iClOuSum iNotGive iOuSuAmt iClouSum
2014 7 01001 0 1000 500 500 100 200
2014 7 01001 0 1000 500 500 300 300
2014 7 01001 0 1000 500 500 400 null
2014 7 01001 0 1000 500 500 200 null
2014 7 01002 100 800 300 600 200 300
2014 7 01002 100 800 300 600 600 null
------解决方案--------------------
分别对出货表,来款表做分组排序(rownumber over partition by),然后再根据和客户表和汇总表去联,最后把出货表,来款表根据iYear iMonth cCstId和rownumber联起来
------解决方案--------------------
SELECT
c.iYear,
c.iMonth,
a.cCStId,
b.iBeSum,
b.iOutSum,
b.iClOuSum,
b.iNotGive,
c.iOuSuAmt,
b.iClouSum
FROM 客户表 a left join 客户汇总表 b on a.cCstId=b.cCstId
LEFT JOIN 出货表 c on a.cCstId=c.cCstId
LEFT JOIN 来款表 d on a.cCstId=d.cCstId
不知道这样,是不是你想要的sql
------解决方案--------------------
如果怕填充的话,用isnull()就可以了吧