17,377
社区成员
发帖
与我相关
我的任务
分享
--这个正确
select rq,
decode(sign(regexp_instr(bz,'sj|sJ|Sj|SJ'))||sign(regexp_instr(bz,'zx|ZX|Zx|zX')),'10','数据出错','01','设备出错','其他') bz,
count(*)
from tb
group by rq,decode(sign(regexp_instr(bz,'sj|sJ|Sj|SJ'))||sign(regexp_instr(bz,'zx|ZX|Zx|zX')),'10','数据出错','01','设备出错','其他')
order by rq
SQL> with tb as(
2 select date '2010-11-24' rq, 'SJBF' bz from dual union all
3 select date '2010-11-24' rq, 'SJ' bz from dual union all
4 select date '2010-11-24' rq, 'sj' bz from dual union all
5 select date '2010-11-24' rq, 'zx' bz from dual union all
6 select date '2010-11-24' rq, 'ZX' bz from dual union all
7 select date '2010-11-25' rq, 'sj16.17' bz from dual union all
8 select date '2010-11-24' rq, 'sJ14.48起' bz from dual union all
9 select date '2010-12-3' rq, 'wsj 7.47-10.30' bz from dual union all
10 select date '2010-12-17' rq, 'zx到 离' bz from dual union all
11 select date '2010-12-7' rq, '到 ZX' bz from dual)
12 select rq,
13 decode(sign(regexp_instr(bz,'sj|sJ|Sj|SJ'))||sign(regexp_instr(bz,'zx|ZX|Zx|zX')),'10','数据出错','01','设备出错','其他') bz,
14 count(*)
15 from tb
16 group by rq,decode(sign(regexp_instr(bz,'sj|sJ|Sj|SJ'))||sign(regexp_instr(bz,'zx|ZX|Zx|zX')),'10','数据出错','01','设备出错','其他')
17 order by rq
18 /
RQ BZ COUNT(*)
----------- -------- ----------
2010-11-24 设备出错 2
2010-11-24 数据出错 4
2010-11-25 数据出错 1
2010-12-3 数据出错 1
2010-12-7 设备出错 1
2010-12-17 设备出错 1
6 rows selected
SQL>
SQL> with tb as(
2 select date '2010-11-24' rq, 'SJBF' bz from dual union all
3 select date '2010-11-24' rq, 'SJ' bz from dual union all
4 select date '2010-11-24' rq, 'sj' bz from dual union all
5 select date '2010-11-24' rq, 'zx' bz from dual union all
6 select date '2010-11-24' rq, 'ZX' bz from dual union all
7 select date '2010-11-25' rq, 'sj16.17' bz from dual union all
8 select date '2010-11-24' rq, 'sJ14.48起' bz from dual union all
9 select date '2010-12-3' rq, 'wsj 7.47-10.30' bz from dual union all
10 select date '2010-12-17' rq, 'zx到 离' bz from dual union all
11 select date '2010-12-7' rq, '到 ZX' bz from dual)
12 select rq,
13 decode(sign(regexp_instr(bz,'sj|SJ'))||sign(regexp_instr(bz,'zx|ZX')),'10','数据出错','01','设备出错','其他') bz,
14 count(*)
15 from tb
16 group by rq,decode(sign(regexp_instr(bz,'sj|SJ'))||sign(regexp_instr(bz,'zx|ZX')),'10','数据出错','01','设备出错','其他')
17 /
RQ BZ COUNT(*)
----------- -------- ----------
2010-12-7 设备出错 1
2010-11-24 设备出错 2
2010-11-24 其他 1
2010-12-3 数据出错 1
2010-12-17 设备出错 1
2010-11-24 数据出错 3
2010-11-25 数据出错 1
7 rows selected
select rq,
decode(sign(regexp_instr(bz,'sj|SJ'))||sign(regexp_instr(bz,'zx|ZX')),'10','数据出错','01','设备出错','其他') bz,
count(*)
from tb
group by rq,decode(sign(regexp_instr(bz,'sj|SJ'))||sign(regexp_instr(bz,'zx|ZX')),'10','数据出错','01','设备出错','其他')
with tb as(
select to_date('2010-11-24','yyyy-mm-dd') RQ,'SJBF' BZ from dual union all
select to_date('2010-11-24','yyyy-mm-dd'),'SJ' from dual union all
select to_date('2010-11-24','yyyy-mm-dd'),'sj' from dual union all
select to_date('2010-11-24','yyyy-mm-dd'),'Sj' from dual union all
select to_date('2010-11-24','yyyy-mm-dd'),'zx' from dual union all
select to_date('2010-11-24','yyyy-mm-dd'),'ZX' from dual union all
select to_date('2010-11-25','yyyy-mm-dd'),'sf16.17' from dual union all
select to_date('2010-11-24','yyyy-mm-dd'),'sJ14.48起' from dual union all
select to_date('2010-11-03','yyyy-mm-dd'),'wsj 7.47-10.30' from dual union all
select to_date('2010-12-17','yyyy-mm-dd'),'zx到 离' from dual union all
select to_date('2010-12-07','yyyy-mm-dd'),'到 ZX' from dual)
--以上为提供数据的语句
select rq,(case when instr(upper(bz),'SJ')>0 then '数据出错'
when instr(upper(bz),'ZX')>0 then '设备出错' else null end),
count(*) cnt
from tb
group by rq,(case when instr(upper(bz),'SJ')>0 then '数据出错'
when instr(upper(bz),'ZX')>0 then '设备出错' else null end)
RQ (CASEWHE CNT
------------------- -------- ----------
2010-12-07 00:00:00 设备出错 1
2010-11-24 00:00:00 设备出错 2
2010-11-25 00:00:00 1
2010-12-17 00:00:00 设备出错 1
2010-11-24 00:00:00 数据出错 5
2010-11-03 00:00:00 数据出错 1
已选择6行。
SELECT rq,'数据出错' bz,Count(*) cnt FROM tab WHERE regexp_like(bz,'sj','i') GROUP BY rq
UNION
SELECT rq,'设备出错' bz,Count(*) cnt FROM tab WHERE regexp_like(bz,'zx','i') GROUP BY rq
-------简化下
SQL> with tablea as(
2 select date '2010-11-24' rq, 'SJBF' bz from dual union all
3 select date '2010-11-24' rq, 'SJ' bz from dual union all
4 select date '2010-11-24' rq, 'sj' bz from dual union all
5 select date '2010-11-24' rq, 'zx' bz from dual union all
6 select date '2010-11-24' rq, 'ZX' bz from dual union all
7 select date '2010-11-25' rq, 'sj16.17' bz from dual union all
8 select date '2010-11-24' rq, 'sJ14.48起' bz from dual union all
9 select date '2010-12-3' rq, 'wsj 7.47-10.30' bz from dual union all
10 select date '2010-12-17' rq, 'zx到 离' bz from dual union all
11 select date '2010-12-7' rq, '到 ZX' bz from dual
12 )
13 select rq, t, count(*)
14 from (select rq,
15 case
16 when instr(upper(bz), 'SJ') > 0 then
17 '数据出错'
18 when instr(upper(bz), 'ZX') > 0 then
19 '设备出错'
20 else
21 '正常'
22 end t
23 from tablea)
24 group by rq, t
25 /
RQ T COUNT(*)
----------- ------------ ----------
2010-11-25 数据出错 1
2010-12-17 设备出错 1
2010-11-24 数据出错 4
2010-11-24 设备出错 2
2010-12-3 数据出错 1
2010-12-7 设备出错 1
6 rows selected
SQL>
SQL>
SQL> with tablea as(
2 select date '2010-11-24' rq, 'SJBF' bz from dual union all
3 select date '2010-11-24' rq, 'SJ' bz from dual union all
4 select date '2010-11-24' rq, 'sj' bz from dual union all
5 select date '2010-11-24' rq, 'zx' bz from dual union all
6 select date '2010-11-24' rq, 'ZX' bz from dual union all
7 select date '2010-11-25' rq, 'sj16.17' bz from dual union all
8 select date '2010-11-24' rq, 'sJ14.48起' bz from dual union all
9 select date '2010-12-3' rq, 'wsj 7.47-10.30' bz from dual union all
10 select date '2010-12-17' rq, 'zx到 离' bz from dual union all
11 select date '2010-12-7' rq, '到 ZX' bz from dual
12 )
13 select rq,
14 case
15 when t = 1 then
16 '数据出错'
17 when t = 2 then
18 '设备出错'
19 else
20 '正常'
21 end,
22 count(*)
23 from (select rq,
24 case
25 when instr(upper(bz), 'SJ') > 0 then
26 1
27 when instr(upper(bz), 'ZX') > 0 then
28 2
29 else
30 0
31 end t
32 from tablea)
33 group by rq,
34 case
35 when t = 1 then
36 '数据出错'
37 when t = 2 then
38 '设备出错'
39 else
40 '正常'
41 end
42 /
RQ CASEWHENT=1THEN'数据出错'WHENT COUNT(*)
----------- ------------------------------ ----------
2010-11-25 数据出错 1
2010-12-17 设备出错 1
2010-11-24 数据出错 4
2010-11-24 设备出错 2
2010-12-3 数据出错 1
2010-12-7 设备出错 1
6 rows selected
SQL>