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 后面的则 只是筛选了病种里带有“肿瘤”字样的情况。

posted @ 2015-10-09 15:45  Sunor  阅读(1682)  评论(0编辑  收藏  举报