Oracle统计之like,or关键字
2015-10-09 15:45
706 查看
有的时候我们统计需要like多个条件,比如某个字段中含有 “银行”或者“投资公司”,这个时候就用like多个字段。
如下是统计某个地区的2015年入院的病种诊断中带有 “癌”或者“肿瘤”的情况,
正确的写法如:
错误的写法:
如果用这种写法,就会得到意想不到的结果。第二条统计语句的统计结果里肯定不仅仅包含2015年的情况,因为关键词 "or" 的前后是两个条件,Oracle把or前后两段当作两个完全独立的筛选条件了,or前面的是按照统计条件来统计的,而 or 后面的则 只是筛选了病种里带有“肿瘤”字样的情况。
如下是统计某个地区的2015年入院的病种诊断中带有 “癌”或者“肿瘤”的情况,
正确的写法如:
SELECT B.AAC002 身份证号, B.AAC003 姓名, TEMP_FUNC_WYL('AAC004', B.AAC004) 性别, C.AAB004 单位, C.AAB999 单位编号, D.AAE006 地址, D.AAE005 联系电话, SUBSTR(A.CKC537, 1, 8) 入院时间, SUBSTR(A.CKC538, 1, 8) 出院时间, A.CKC546 出院诊断, A.CKB519 就诊医院 FROM KC21 A, AC01 B, AE01 C, SAC02 D WHERE A.AAC001 = B.AAC001 AND B.AAC001 = D.AAC001 AND B.AAB001 = C.AAB001 AND B.BAE001 = '511502' AND SUBSTR(A.CKC537, 1, 4) = 2015 AND A.CKC546 LIKE '%癌%' GROUP BY B.AAC002, B.AAC003, B.AAC004, C.AAB004, C.AAB999, D.AAE006, D.AAE005, A.CKC537, A.CKC538, A.CKC546, A.CKB519 UNION ALL SELECT B.AAC002 身份证号, B.AAC003 姓名, TEMP_FUNC_WYL('AAC004', B.AAC004) 性别, C.AAB004 单位, C.AAB999 单位编号, D.AAE006 地址, D.AAE005 联系电话, SUBSTR(A.CKC537, 1, 8) 入院时间, SUBSTR(A.CKC538, 1, 8) 出院时间, A.CKC546 出院诊断, A.CKB519 就诊医院 FROM KC21 A, AC01 B, AE01 C, SAC02 D WHERE A.AAC001 = B.AAC001 AND B.AAC001 = D.AAC001 AND B.AAB001 = C.AAB001 AND B.BAE001 = '511502' AND SUBSTR(A.CKC537, 1, 4) = 2015 AND A.CKC546 LIKE '%肿瘤%' GROUP BY B.AAC002, B.AAC003, B.AAC004, C.AAB004, C.AAB999, D.AAE006, D.AAE005, A.CKC537, A.CKC538, A.CKC546, A.CKB519;
错误的写法:
SELECT B.AAC002 身份证号, B.AAC003 姓名, TEMP_FUNC_WYL('AAC004', B.AAC004) 性别, C.AAB004 单位, C.AAB999 单位编号, D.AAE006 地址, D.AAE005 联系电话, SUBSTR(A.CKC537, 1, 8) 入院时间, SUBSTR(A.CKC538, 1, 8) 出院时间, A.CKC546 出院诊断, A.CKB519 就诊医院 FROM KC21 A, AC01 B, AE01 C, SAC02 D WHERE A.AAC001 = B.AAC001 AND B.AAC001 = D.AAC001 AND B.AAB001 = C.AAB001 AND B.BAE001 = '511502' AND SUBSTR(A.CKC537, 1, 4) = 2015 AND A.CKC546 LIKE '%癌%' or LIKE '%肿瘤%' GROUP BY B.AAC002, B.AAC003, B.AAC004, C.AAB004, C.AAB999, D.AAE006, D.AAE005, A.CKC537, A.CKC538, A.CKC546, A.CKB519
如果用这种写法,就会得到意想不到的结果。第二条统计语句的统计结果里肯定不仅仅包含2015年的情况,因为关键词 "or" 的前后是两个条件,Oracle把or前后两段当作两个完全独立的筛选条件了,or前面的是按照统计条件来统计的,而 or 后面的则 只是筛选了病种里带有“肿瘤”字样的情况。
相关文章推荐
- Oracle trunc()函数的用法
- 关于Class.forName("oracle.jdbc.driver.OracleDriver");报ClassNotFoundException 的异常
- PLSQL连接ORACLE需要配置些什么
- Oracle Scott创建视图权限不足解决办法
- oracle冷备份
- oracle优化辅助SQL语句
- oracle 第02章 基本操作
- 教您如何检查oracle死锁,决解死锁
- Win7 64位下使用oracle客户端异常的处理过程
- oracle11g-关闭日志审计
- Oracle DB 使用调度程序自动执行任务
- 关于时间比较,ORA-01861: literal does not match format string
- oracle客户端的安装和plsql的远程连接教程
- Oracle Partition Outer Join 稠化报表
- Oracle dblink详解
- 如何让oracle的select强制走索
- Oracle常用操作-----(二)
- oracle数据字典
- Oracle之物化视图
- OracleRac11.2.0.3迁移OCR和VOTEDISK