具体如下:
SQL> select * from test;
SFZH HBRQHBLB
------ ----------- ----
12011-01-031
12011-01-041
12011-01-052
12011-01-062
12011-01-071
12011-01-082
12011-01-091
12011-01-101
12011-01-111
22011-01-092
22011-01-112
22011-01-132
22011-02-111
22011-03-131
22011-03-151
22011-03-251
16 rows selected
SQL>
SQL> selectsfzh,
2
sum(decode(hblb, '1', cnt - 1, 0)) flag1, --有进无出总次数
3
sum(decode(hblb, '2', cnt - 1, 0)) flag2 ---有出无进总次数
4from
5(select sfzh,
6
max(hblb) hblb,
7
count(*) cnt
8from
9(select sfzh,
10
hbrq,
11
hblb,
12
sum(rn) over(partition by sfzh order by hbrq) rn
13from
14(select sfzh,
15
hbrq,
16
hblb,
17
decode(hblb,
18
lag(hblb) over(partition by sfzh order by hbrq),
19
0,
20
row_number() over(partition by sfzh order by hbrq)) rn
21from test))
22group by sfzh, rn
23having count(*) > 1)
24group by sfzh;
SFZHFLAG1FLAG2
------ ---------- ----------
1
3
1
2
3
2
SQL>
|