oracle-外连接left join的应用

需求

自助设备交易统计


输入项


类型


可为空


备注


机构


选择


Y


采用下拉框的形式


终端号


手输


Y


与柜员号二选一


交易柜员号


手输


与终端号二选一


时间


选择


N


时间区间


状态


多选


设备状态:停用、启用

输出(新增各业务的交易总额字段):

我自己在报表工具birt中写的sql

select  *
from (
 -- 查询基本信息
    select    term.TERMINAL_ID BASIC_TERM_ID,
        max(term.APP_TERM_NO) APP_TERM_NO,
        max(device.DEVICE_TYPE) DEVICE_TYPE,
        max(model.MODEL_DESC) MODEL_DESC,
        max(branch.SHORT_NAME) branch_name,
        max(subbranch.SHORT_NAME) sub_name,
        max(self.SHORT_NAME) self_name,
        max(self.INST_TYPE) INST_TYPE
    from     SELFCUR.OPS_TERMINAL_INFO    term,
        SELFCUR.OPS_DEVICE_INFO        device,
        SELFCUR.OPS_DEVICE_MODEL    model,
        SELFCUR.OPS_INSTITUTION        branch,
        SELFCUR.OPS_INSTITUTION        subbranch,
        SELFCUR.OPS_INSTITUTION        self,
        SELFCUR.BIZ_MAIN_TRANS_HIS    trans
    where    trans.TERM_ID=term.TERMINAL_ID
        and term.TERMINAL_ID=device.TERMINAL_ID
            and device.MODEL_ID=model.MODEL_ID
            and term.INST_ID=self.INST_ID
            and self.PARENT_INST_ID=subbranch.INST_ID
            and subbranch.PARENT_INST_ID=branch.INST_ID
        -- 这里需要加入特殊符号来标识,用界面传过来的参数组成sql进行替换
        --XXXXYYYY--
    group by term.TERMINAL_ID
   )trans_basic
left join(
 -- 联通缴费
    select trans.TERM_ID  TERM_ID,
               count(1) PAY_LT_Count,
               sum(trans.TRAN_AMT) PAY_LT_Money
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011402‘
               and BIZ_ID=‘009‘
    group by trans.TERM_ID
    ) trans_pay_lt
on
    trans_basic.BASIC_TERM_ID=trans_pay_lt.TERM_ID
left join(
 -- 移动缴费
    select trans.TERM_ID  TERM_ID,
               count(1) PAY_YD_Count,
               sum(trans.TRAN_AMT) PAY_YD_Money
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011402‘
               and BIZ_ID=‘013‘
    group by trans.TERM_ID
    ) trans_pay_yd
on
    trans_basic.BASIC_TERM_ID=trans_pay_yd.TERM_ID
left join(
 -- 查询电信缴费
    select trans.TERM_ID  TERM_ID,
               count(1) PAY_DX_Count,
               sum(trans.TRAN_AMT) PAY_DX_Money
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011402‘
               and BIZ_ID=‘012‘
    group by trans.TERM_ID
    ) trans_pay_dx
on
    trans_basic.BASIC_TERM_ID=trans_pay_dx.TERM_ID
left join(
 -- 电力缴费
    select trans.TERM_ID  TERM_ID,
               count(1) PAY_DL_Count,
               sum(trans.TRAN_AMT) PAY_DL_Money
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011402‘
        --重庆电力014 三峡电力 008
               and (BIZ_ID=‘014‘ or BIZ_ID=‘008‘)
    group by trans.TERM_ID
    ) trans_pay_dl
on
    trans_basic.BASIC_TERM_ID=trans_pay_dl.TERM_ID
left join(
 -- 自来水缴费
    select trans.TERM_ID  TERM_ID,
               count(1) PAY_ZLS_Count,
               sum(trans.TRAN_AMT) PAY_ZLS_Money
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011402‘
        --水务2测试 004 水费 005
               and (BIZ_ID=‘004‘ or BIZ_ID=‘005‘)
    group by trans.TERM_ID
    ) trans_pay_zls
on
    trans_basic.BASIC_TERM_ID=trans_pay_zls.TERM_ID
left join(
 -- 燃气缴费
    select trans.TERM_ID  TERM_ID,
               count(1) PAY_RQ_Count,
               sum(trans.TRAN_AMT) PAY_RQ_Money
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011402‘
        --再生资源 003
               and BIZ_ID=‘003‘
    group by trans.TERM_ID
    ) trans_pay_rq
on
    trans_basic.BASIC_TERM_ID=trans_pay_rq.TERM_ID
left join(
 -- 现金交易 取款
    select trans.TERM_ID  TERM_ID,
               count(1) CASH_QK_Count,
               sum(trans.TRAN_AMT) CASH_QK_Money
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011101‘
    group by trans.TERM_ID
    ) trans_cash_qk
on
    trans_basic.BASIC_TERM_ID=trans_cash_qk.TERM_ID
left join(
 -- 现金交易 存款
    select trans.TERM_ID  TERM_ID,
               count(1) CASH_CK_Count,
               sum(trans.TRAN_AMT) CASH_CK_Money
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011103‘
    group by trans.TERM_ID
    ) trans_cash_ck
on
    trans_basic.BASIC_TERM_ID=trans_cash_ck.TERM_ID
left join(
 -- 现金交易 查询
 --余额查询1011001  查询交易明细1011002 积分查询 1011003
    select trans.TERM_ID  TERM_ID,
               count(1) CASH_CX_Count
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011001‘
    group by trans.TERM_ID
    ) trans_cash_cx
on
    trans_basic.BASIC_TERM_ID=trans_cash_cx.TERM_ID
    left join(
 -- 现金交易 转账
    select trans.TERM_ID  TERM_ID,
               count(1) CASH_ZH_Count,
               sum(trans.TRAN_AMT) CASH_ZH_Money
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011104‘
    group by trans.TERM_ID
    ) trans_cash_zh
on
    trans_basic.BASIC_TERM_ID=trans_cash_zh.TERM_ID
left join(
 -- 补登折 存折
    select trans.TERM_ID  TERM_ID,
               count(1) BUDENG_CZ_Count
    from   SELFCUR.BIZ_MAIN_TRANS_HIS trans
        where  trans.P_TRANS_CODE=‘1011502‘
    group by trans.TERM_ID
    ) trans_budeng_cz
on
    trans_basic.BASIC_TERM_ID=trans_budeng_cz.TERM_ID

以后用到left join 可以参考上面写的

此外,贴出在birt 的数据集脚本beforeOpen

var text="";
// 交易时间
text += " and  trans.P_REQ_DATE  between  ‘"+ reportContext.getParameterValue("startDate").toString().replaceAll("-","") +"‘ and ‘"+reportContext.getParameterValue("endDate").toString().replaceAll("-","") + "‘";

// 分行
var branchId=reportContext.getParameterValue("branchId"); 

if(branchId != null && branchId!="" && branchId!="null"){
    text += " and branch.INST_ID= " + branchId ;
}

// 支行
var subId=reportContext.getParameterValue("subId"); 

if(subId != null && subId!="" && subId!="null"){
    text += " and subbranch.INST_ID= " + subId ;
}

// 自助银行
var selfId=reportContext.getParameterValue("selfId"); 

if(selfId != null && selfId!="" && selfId!="null"){
    text += " and self.INST_ID= " + selfId;
}

// 终端号
var termId=reportContext.getParameterValue("termId"); 

if(termId != null && termId!="" && termId!="null"){
    text += " and trans.TERM_ID= " + termId ;
}

// 柜员号
var tellNo=reportContext.getParameterValue("tellNo"); 

if(tellNo != null && tellNo!="" && tellNo!="null"){
    text += " and trans.TELL_NO= " + tellNo ;
}

// 设备状态
var deviceState=reportContext.getParameterValue("deviceState"); 

if(deviceState != null && deviceState!="" && deviceState!="null"){
    text += " and device.DEVICE_STATE in ( " + deviceState + ")" ;
}

// queryText中只有一个 --XXXXYYYY--
var oldText=this.queryText.split("--XXXXYYYY--");
this.queryText=oldText[0]+text+oldText[1];

oracle-外连接left join的应用

时间: 2024-08-17 12:26:18

oracle-外连接left join的应用的相关文章

oracle外连接 (+)

http://www.cnblogs.com/opaljc/archive/2013/04/09/3009898.html 外连接有以下三种(一般没有left.right.full等关键字的都是内连接): 1. 左外连接(以左表为基础表,左表全量数据):left [outer] join 2. 右外连接(以右表为基础表,右表全量数据):right [outer] join 3. 全外连接(两表都是基础表):full  [outer] join 对于外连接,也可以使用“(+)”来表示.但须注意:

外连接OUTER JOIN

外连接OUTER JOIN 1   LEFT [OUTER] JOIN,左外连接 显示左表的全部记录及右表符合连接条件的记录 下面我们来演示一下,操作命令及部分结果如下: SELECT goods_id,goods_name,cate_name FROM tdb_goods LEFT JOIN tdb_goods_cates ON tdb_goods.cate_id = tdb_goods_cates.cate_id\G; 现在我们发现一共得到了23条记录,我们来看一下第23条记录,我们发现他的

DB2数据库的外连接(OUTER JOIN),内连接(INNER JOIN)和交叉连接(CROSS JOIN)区别

1.交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积,返回记录的个数应当是a和b表中符合记录的和. 显式:select [cols_list] from a cross join b where [condition] 隐式:select [cols_list] from a, b where [condition] 2.内连接(INNER JOIN):有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行,和我们写普通的sql

oracle 表连接 - hash join 哈希连接

一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集的表连接方法. 哈希连接仅仅能用于等值连接条件(=). 如果以下的 sql 语句中表 T1 和 T2 的连接方式是哈希连接, T1 是驱动表 select * from T1, T2 where T1.id = T2.id and T1.name = 'David'; oracle 运行过程例如以下

Oracle 左连接 left join、右连接right join说明

Oracle 左.右连接 + 在等号 左边表示右连接  获取右表所有记录,即使左表没有对应匹配的记录. + 在等号 右边表示左连接  获取左表所有记录,即使右表没有对应匹配的记录. 例子: select e.empno,e.name,d.deptno,d.dname,d.loc from emp e,dept d where e.deptno(+) = d.deptno 右连接 已知  emp表中没有40,dept表中有40,部门编号为40的没有员工. 使用右连接  from emp e rig

Oracle左连接、右连接、全外连接以及(+)号用法(转)

Oracle  外连接(OUTER JOIN) 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/FULL OUTER JOIN. 通常省略OUTER关键字, 写成:LEFT/RIGHT/FULL JOIN. 在左连接和右连接时都会以一张A表为基础表,该表的内容会全部显示,然后加上A表和B表匹配的内容. 如果A表的数据在B表中没有记录. 那么在相关联的结果集行中列显示为空值(NULL). 对于外连接, 也可以使用“(+)

Oracle左连接、右连接、全外连接以及(+)号用法

阅读目录 1.准备工作 2.左外连接(LEFT OUTER JOIN/ LEFT JOIN) 3.右外连接(RIGHT OUTER JOIN/RIGHT JOIN) 4.全外连接(FULL OUTER JOIN/FULL JOIN) 1.准备工作 Oracle  外连接(OUTER JOIN)包括以下: 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/FULL OUTER JOIN. 通常省略OUTER关键字, 写成:

[转载]Oracle左连接、右连接、全外连接以及(+)号用法

Oracle  外连接(OUTER JOIN) 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/FULL OUTER JOIN. 通常省略OUTER关键字, 写成:LEFT/RIGHT/FULL JOIN. 在左连接和右连接时都会以一张A表为基础表,该表的内容会全部显示,然后加上A表和B表匹配的内容. 如果A表的数据在B表中没有记录. 那么在相关联的结果集行中列显示为空值(NULL). 对于外连接, 也可以使用"(+)

外连接

本文的源博主:http://www.cnblogs.com/hehaiyang/p/4745897.html 阅读目录 1.准备工作 2.左外连接(LEFT OUTER JOIN/ LEFT JOIN) 3.右外连接(RIGHT OUTER JOIN/RIGHT JOIN) 4.全外连接(FULL OUTER JOIN/FULL JOIN) 回到目录 1.准备工作 Oracle  外连接(OUTER JOIN)包括以下: 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右

左连接,右连接,内连接,外连接, join, left join, right join ,mysql ,oracle

2016-6-12 22:35:51 工作用了一年多的oracle,最近在学mysql, 仔细想想 各种连接,感觉这些概念还是蛮烦人的! 最近整理了一下,分享一下自己的理解,有些东西是借鉴网上并自己吸收了的. 1.不管是什么连接,oracle和mysql的原理是一模一样的,只是有些写法不一样而已.说到写法,这里提一下, select * from A, B where a.filed1=b.filed2; --这是第1种写法, 内连接,这样写,很方便, oracle和mysql通用 select