|
其实之前的代码只要做很小的改动即可, 代码测试如下:
SQL> select GOODS_GROUP1,
2 GOODS_CODE1,
3 LABEL_CODE1,
4 LOT_NO1,
5 START_NO1,
6 END_NO1,
7 GOODS_GROUP2,
8 GOODS_CODE2,
9 LABEL_CODE2,
10 LOT_NO2,
11 START_NO2,
12 END_NO2
13 from
14 (
15 select a.GOODS_GROUP GOODS_GROUP1,
16 a.GOODS_CODE GOODS_CODE1,
17 a.LABEL_CODE LABEL_CODE1,
18 a.LOT_NO LOT_NO1,
19 a.START_NO START_NO1,
20 a.END_NO END_NO1,
21 b.GOODS_GROUP GOODS_GROUP2,
22 b.GOODS_CODE GOODS_CODE2,
23 b.LABEL_CODE LABEL_CODE2,
24 b.LOT_NO LOT_NO2,
25 b.START_NO START_NO2,
26 b.END_NO END_NO2,
27 row_number() over(partition by a.GOODS_GROUP, least(a.LABEL_CODE || a.LOT_NO, b.LABEL_CODE || b.LOT_NO), greatest(a.LABEL_CODE || a.LOT_NO, b.LABEL_CODE || b.LOT_NO) order by a.START_NO) rn
28 from table_label a,
29 table_label b
30 where a.goods_group = b.goods_group
31 and ((a.start_no <= b.start_no and a.end_no >= b.start_no) or (a.start_no <= b.end_no and a.end_no >= b.end_no))
32 and a.goods_code || '-' || A.LOT_NO || '-' || A.LABEL_CODE <> B.goods_code || '-' || B.LOT_NO || '-' || B.LABEL_CODE
33 )
34 where rn = 1;
GOODS_GROUP1 GOODS_CODE1 LABEL_CODE1 LOT_NO1 START_NO1 END_NO1 GOODS_GROUP2 GOODS_CODE2 LABEL_CODE2 LOT_NO2 START_NO2 END_NO2
------------ ----------- ----------- -------- ---------- ---------- ------------ ----------- ----------- -------- ---------- ----------
A G1 L1 J1 101 250 A G2 L1 J2 180 300
A G2 L1 J2 180 300 A G2 L2 J2 300 310
B G6 L4 J6 211 290 B G7 L4 J7 280 360
C G8 L6 J9 85 210 C G8 L5 J8 101 250
C G8 L5 J8 101 250 C G8 L7 J9 200 300
C G8 L6 J9 85 210 C G8 L7 J9 200 300
6 rows selected
SQL>
|
|