现有表结构如下:
create table TEST
(
ID NUMBER(5),
P1 VARCHAR2(30),
P2 VARCHAR2(30),
O1 NUMBER(5),
O2 VARCHAR2(30),
NAME VARCHAR2(30),
ADDR VARCHAR2(30)
);
insert into test (ID, P1, P2, O1, O2, NAME, ADDR)
values (1, 'P01', 'A', 3, '', 'NAME1', '');
insert into test (ID, P1, P2, O1, O2, NAME, ADDR)
values (2, 'P01', 'A', 3, 'B', '', 'ADDR1');
insert into test (ID, P1, P2, O1, O2, NAME, ADDR)
values (3, 'P01', 'A', 1, 'B', 'NAME2', '');
insert into test (ID, P1, P2, O1, O2, NAME, ADDR)
values (4, 'P02', 'B', 2, 'M', 'NAME3', '');
insert into test (ID, P1, P2, O1, O2, NAME, ADDR)
values (5, 'P02', 'B', 2, '', 'NAME5', 'ADDR2');
insert into test (ID, P1, P2, O1, O2, NAME, ADDR)
values (6, 'P02', 'C', 1, 'C', '', 'ADDR5');
commit;
数据视图如下:
ID P1 P2 O1 O2 NAME ADDR
1 P01 A 3 NAME1
2 P01 A 3 B ADDR1
3 P01 A 1 B NAME2
4 P02 B 2 M NAME3
5 P02 B 2 NAME5 ADDR2
6 P02 C 1 C ADDR5
现在要求按 P1 和 P2 分组,分组内按O1和O2排序(NULL排最后),然后取分组的第一条记录;
对于每个分组内 NAME要求取排序最高的非空的值,ADDR的取值要求同NAME。结果如下所示:
ID P1 P2 O1 O2 NAME ADDR
2 P01 A 3 B NAME1 ADDR1
4 P02 B 2 M NAME3 ADDR2
6 P02 C 1 C ADDR5
我知道对于单个NAME比较容易实现,如果要求一次按以上要求取多个,各位有啥好的办法呢?
谢谢先