zoukankan      html  css  js  c++  java
  • Oracle统计之like,or关键字

    有的时候我们统计需要like多个条件,比如某个字段中含有 “银行”或者“投资公司”,这个时候就用like多个字段。

    如下是统计某个地区的2015年入院的病种诊断中带有 “癌”或者“肿瘤”的情况,

    正确的写法如:

     1 SELECT B.AAC002 身份证号,
     2        B.AAC003 姓名,
     3        TEMP_FUNC_WYL('AAC004', B.AAC004) 性别,
     4        C.AAB004 单位,
     5        C.AAB999 单位编号,
     6        D.AAE006 地址,
     7        D.AAE005 联系电话,
     8        SUBSTR(A.CKC537, 1, 8) 入院时间,
     9        SUBSTR(A.CKC538, 1, 8) 出院时间,
    10        A.CKC546 出院诊断,
    11        A.CKB519 就诊医院
    12   FROM KC21 A, AC01 B, AE01 C, SAC02 D
    13  WHERE A.AAC001 = B.AAC001
    14    AND B.AAC001 = D.AAC001
    15    AND B.AAB001 = C.AAB001
    16    AND B.BAE001 = '511502'
    17    AND SUBSTR(A.CKC537, 1, 4) = 2015
    18    AND A.CKC546 LIKE '%癌%'
    19  GROUP BY B.AAC002,
    20           B.AAC003,
    21           B.AAC004,
    22           C.AAB004,
    23           C.AAB999,
    24           D.AAE006,
    25           D.AAE005,
    26           A.CKC537,
    27           A.CKC538,
    28           A.CKC546,
    29           A.CKB519
    30 UNION ALL
    31 SELECT B.AAC002 身份证号,
    32        B.AAC003 姓名,
    33        TEMP_FUNC_WYL('AAC004', B.AAC004) 性别,
    34        C.AAB004 单位,
    35        C.AAB999 单位编号,
    36        D.AAE006 地址,
    37        D.AAE005 联系电话,
    38        SUBSTR(A.CKC537, 1, 8) 入院时间,
    39        SUBSTR(A.CKC538, 1, 8) 出院时间,
    40        A.CKC546 出院诊断,
    41        A.CKB519 就诊医院
    42   FROM KC21 A, AC01 B, AE01 C, SAC02 D
    43  WHERE A.AAC001 = B.AAC001
    44    AND B.AAC001 = D.AAC001
    45    AND B.AAB001 = C.AAB001
    46    AND B.BAE001 = '511502'
    47    AND SUBSTR(A.CKC537, 1, 4) = 2015
    48    AND A.CKC546 LIKE '%肿瘤%'
    49  GROUP BY B.AAC002,
    50           B.AAC003,
    51           B.AAC004,
    52           C.AAB004,
    53           C.AAB999,
    54           D.AAE006,
    55           D.AAE005,
    56           A.CKC537,
    57           A.CKC538,
    58           A.CKC546,
    59           A.CKB519;

    错误的写法:

     1 SELECT B.AAC002 身份证号,
     2        B.AAC003 姓名,
     3        TEMP_FUNC_WYL('AAC004', B.AAC004) 性别,
     4        C.AAB004 单位,
     5        C.AAB999 单位编号,
     6        D.AAE006 地址,
     7        D.AAE005 联系电话,
     8        SUBSTR(A.CKC537, 1, 8) 入院时间,
     9        SUBSTR(A.CKC538, 1, 8) 出院时间,
    10        A.CKC546 出院诊断,
    11        A.CKB519 就诊医院
    12   FROM KC21 A, AC01 B, AE01 C, SAC02 D
    13  WHERE A.AAC001 = B.AAC001
    14    AND B.AAC001 = D.AAC001
    15    AND B.AAB001 = C.AAB001
    16    AND B.BAE001 = '511502'
    17    AND SUBSTR(A.CKC537, 1, 4) = 2015
    18    AND A.CKC546 LIKE '%癌%' or LIKE '%肿瘤%'
    19  GROUP BY B.AAC002,
    20           B.AAC003,
    21           B.AAC004,
    22           C.AAB004,
    23           C.AAB999,
    24           D.AAE006,
    25           D.AAE005,
    26           A.CKC537,
    27           A.CKC538,
    28           A.CKC546,
    29           A.CKB519

    如果用这种写法,就会得到意想不到的结果。第二条统计语句的统计结果里肯定不仅仅包含2015年的情况,因为关键词 "or" 的前后是两个条件,Oracle把or前后两段当作两个完全独立的筛选条件了,or前面的是按照统计条件来统计的,而 or 后面的则 只是筛选了病种里带有“肿瘤”字样的情况。

  • 相关阅读:
    C#语言 循环语句
    C#语言基础语句
    抛出异常不会终止程序:
    Giew与checkBox的结合
    js去掉空格
    转:label标签的特殊用法
    LINQ Operators之过滤(Filtering)
    转:设置session过期时间
    转:Bat命令学习
    收藏:锁(待阅)
  • 原文地址:https://www.cnblogs.com/Sunnor/p/4864164.html
Copyright © 2011-2022 走看看