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, ) PAY_LT_Count, sum(trans.TRAN_AMT) PAY_LT_Money from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' ' 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, ) PAY_YD_Count, sum(trans.TRAN_AMT) PAY_YD_Money from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' ' 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, ) PAY_DX_Count, sum(trans.TRAN_AMT) PAY_DX_Money from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' ' 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, ) PAY_DL_Count, sum(trans.TRAN_AMT) PAY_DL_Money from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' --重庆电力014 三峡电力 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, ) PAY_ZLS_Count, sum(trans.TRAN_AMT) PAY_ZLS_Money from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' --水务2测试 004 水费 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, ) PAY_RQ_Count, sum(trans.TRAN_AMT) PAY_RQ_Money from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' --再生资源 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, ) CASH_QK_Count, sum(trans.TRAN_AMT) CASH_QK_Money from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' 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, ) CASH_CK_Count, sum(trans.TRAN_AMT) CASH_CK_Money from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' 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, ) CASH_CX_Count from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' 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, ) CASH_ZH_Count, sum(trans.TRAN_AMT) CASH_ZH_Money from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' 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, ) BUDENG_CZ_Count from SELFCUR.BIZ_MAIN_TRANS_HIS trans ' 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的应用的更多相关文章
- oracle 外连接以及用on和where 的区别
Oracle 外连接(OUTER JOIN)包括以下: 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/FULL OUT ...
- 外连接OUTER JOIN(三十五)
外连接OUTER JOIN LEFT [OUTER] JOIN,左外连接 显示左表的全部记录及右表符合连接条件的记录 下面我们来演示一下,操作命令及部分结果如下: SELECT goods_id, ...
- Oracle 外连接和 (+)号的用法
对于外连接,Oracle中可以使用“(+)”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍.1. LEFT OUTER JOIN:左外关联 SELEC ...
- oracle——外连接查询
一.问题描述 有时我们为了保留某个表中的数据,而该表中的数据在另外一个关联表中未必都存在对应,此时就应该试用外连接查询. 比如:两个表,产品表和子产品表 注:子产品的parent_product_id ...
- JOIN中的外连接(external join)
外连接: ---外连接并不要求连接的两表的每一条记录在对方表中都有一条匹配记录.要保留所有记录(甚至这条记录没有匹配的记录也要保留)的表成为保留表.外连接可以一句连接表保 留左表,右表和全部表的行二进 ...
- oracle 表连接 - hash join 哈希连接
一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集 ...
- Oracle 左连接 left join、右连接right join说明
Oracle 左.右连接 + 在等号 左边表示右连接 获取右表所有记录,即使左表没有对应匹配的记录. + 在等号 右边表示左连接 获取左表所有记录,即使右表没有对应匹配的记录. 例子: selec ...
- ORACLE外连接实例
--查询各个部门工资范围,按照1000~2000,2000~3000....这样的格式显示人数 -------------------方法一 select dept.dname ,nvl(ano,) ...
- Oracle外连接与条件的组合
由于很少使用SQL 92语法,今天写个outer join的时候被搞晕了.参考了一些例子后整理如下.总结,"inter join on"中的条件是对table进行joining的r ...
- Oracle左连接、右连接、全外连接以及(+)号用法(转)
+:与附带的字段相连,和“+”相连的字段值,不管是否存在,都会展示 也就是带上相连接的字段 有数据了就显示,没数据就显示为null Oracle 外连接(OUTER JOIN) 左外连接(左边的表不 ...
随机推荐
- 设计模式(8)--Decorator--装饰器模式--结构型
1.模式定义: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 2.模式特点: 装饰模式能够实现动态的为对象添加功能,是从一个对象 ...
- VRTK实现瞬移需要添加的脚本
进入一个新的公司,boss让实现漫游,但是新公司的Unity版本是5.6,我之前的瞬移插件不好用了,无奈之下找到一个我不熟悉的插件VRTK,但是查了很多资料也没有实现瞬移.经过自己查脚本与实验终于得到 ...
- C#操作EML邮件文件实例(含HTML格式化邮件正文和附件)
使用QQ邮箱.163邮箱等导出的EML邮件,包含了邮件的发件人.主题.内容.附件等所有信息,该实例就如何解析这些信息,并在编辑后保存做个Demo. 如下图所示,EML文件是编码后的文本文件,可以使用正 ...
- oracle中如何移动数据文件
a.shutdown immediate关闭数据库 b.在os下拷贝数据文件到新的地点 c.Startup mount 启动到mount下 d.Alter database rename fil ...
- 7.31.1 java内存的主要划分
java内存的主要划分:class文件加载到方法区,方法区还存放静态变量和常量,方法区开始执行程序,当调用方法时,会将该方法的栈帧压到栈区,该栈帧中存放局部变量,当方法中new出一个对象,则会在堆中开 ...
- JTAG基础知识
前言 本知识翻译收集来自http://www.fpga4fun.com,版权归原网站所有. 1.什么是JTAG:Joint Test Action Group:联合测试工作组 JTAG是一种IEEE标 ...
- 移动端touch事件 || 上拉加载更多
前言: 说多了都是泪,在进行项目开发时,在上拉加载更多实现分页效果的问题上,由于当时开发任务紧急,所以就百度找了各种移动端的上拉下拉 实现加载更多的插件.然后就留下了个坑:上拉加载的时候会由于用户错误 ...
- Jmeter之解决烦人的中文乱码问题
Jmeter是一款国外开源工具,所以就跟LR一样,对中文的支持不是很好,经常会有同学录制脚本后回放或者是发送HTTP请求,看到响应报文里面有乱码! 那如何才能解决这个问题呢?我们分2个情况来分析: 一 ...
- Django创建应用、模型、配置后台自动管理
1.创建应用 python manage.py startapp myblog 2.应用结构 3.创建模型(models.py) from django.db import models # Crea ...
- java快速排序详解
快速排序 public class QuickSort { public static void main(String[] args) { int[] a = { 0, 3, 6, 8, 2, 4, ...