当前位置: 代码迷 >> Sql Server >> 4个表关联的实际
  详细解决方案

4个表关联的实际

热度:43   发布时间:2016-04-24 10:21:55.0
4个表关联的现实


客户表
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()就可以了吧
  相关解决方案