当前位置: 代码迷 >> Oracle管理 >> 由5张表里查询数据,一个有点不太简单的查询,请
  详细解决方案

由5张表里查询数据,一个有点不太简单的查询,请

热度:34   发布时间:2016-04-24 04:26:44.0
由5张表里查询数据,一个有点不太简单的查询,请高手指点。
A表  字段如下


CSEL_FILECODE CSEL_SELLTYPE RTP_ID(企业编码) CID_CODE BTO_ID ZIS_STORECODE CSEL_OUTMAN CSEL_OUTDATE(出库日期) CSEL_MONEYCONFIRM CSEL_REASON CSEL_CHECKMAN CSEL_CHECKDATE CSEL_VOUCHERPRINT DH_TYPE DH_ID ZT_YEARNUM ZT_TICKETNUM THIS_UNLOCK CSEL_ISCANCEL CSEL_ISWRITEDISK

A_SUB表 字段如下


CSLS_SEQUENCODE CSL_FILECODE CBI_INVOICECODE CSLS_STARTNUM(发票开始号码) CSLS_YEARNUM CSLS_ENDNUM(发票结束号码) RTP_ID(企业编码) CSLS_NUM CSLS_SUM

B表 字段如下
CSL_FILECODE RTP_ID(企业编码) BTO_ID CIS_STORECODE CSL_OUTID CSL_OUTDATE(领票日期) CSL_MONEYCONFIRM CSL_REASON CSL_CHECKMAN CIH_VOUCHERNUM CSL_VOUCHERPRINT CSL_BOOKPRINT CSL_DHID ZT_INVOICECODE ZT_TICKETNUM ZT_YEARNUM THIS_UNLOCK

B_SUB表 字段如下

CSEL_FILECODE CSELS_FILECODE ZBI_INVOICECODE ZIC_INVOICECODE CSELS_NUM CSELS_STARTNUM CSELS_ENDNUM CSELS_SUM(领购数量) CSELS_SPARENUM

C表 字段如下
RTP_ID(企业编码)  RTP_NAME(企业名称)

先解释下逻辑关系 
1、 A_SUB 就是A表的附表,单独关联这两张表可以查询出(举了2笔数据做例子)

RTP_ID(企业编码)   CSEL_OUTDATE(出库日期)    sum(CSLS_ENDNUM(发票结束号码)-CSLS_STARTNUM(发票开始号码)+1)(这个是用发票结束号码-开始号码+1计算出来的)

123456                    2013-12-23                50
123456                    2013-12-25                90
2、B_SUB 就是B表的附表,单独关联这两张表可以查询出

RTP_ID(企业编码)  CSL_OUTDATE(领票日期)   CSELS_SUM(领购数量)
123456                    2014-1-3                 120
123456                    2014-1-5                 100                 

现在要求将以上数据组合到一起(A、B两个表中的出库日期和领票日期是不重复的)并且关联C表最终显示
企业编码   企业名称                 日期                本次领票量 
123456     友谊公司               2013-12-23                50
123456     友谊公司               2013-12-25                90
123456     友谊公司               2014-1-3                 120
123456     友谊公司               2014-1-5                 100 

望高手指点,高分奖励。
  
------解决方案--------------------
是这样吗:
select a1.RTP_ID,a2.CSEL_OUTDATE,SUM(CSLS_STARTNUM - CSLS_ENDNUM+1) v1
from a_sub a1
inner join a a2
        on a1.RTP_ID = a2.RTP_ID
group by a1.RTP_ID,a2.CSEL_OUTDATE

union all

select a1.RTP_ID,a2.CSL_OUTDATE,SUM(CSELS_SUM) v1
from b_sub a1
inner join b a2
        on a1.RTP_ID = a2.RTP_ID
group by a1.RTP_ID,a2.CSEL_OUTDATE        

------解决方案--------------------
像楼上所说,你union all 不就可以了?
再union之前先分别left join C表 查询到企业名称就ok.
(PS:我们也不知道你具体的A和A_SUB,B和B_SUB关系...,数据处理也没有说清除。)
  相关解决方案