场景如下: 根据某些条件,每个员工都属于多个类别。这些类别有顺序。在检查员工的类别时,如果他属于类别 1,我们不应该检查其他类别。如果他不属于类别 1 而他属于类别 2 那么我们不应该检查其他类别等等。我们如何在 SELECT 子句中写入它?
我无法考虑开始时的查询。
如果贴出测试用例就更好了;没有它,我们必须自己弄清楚,所以-这是我的尝试,但没有多大意义(不需要加入
category
,因为简单的 MIN 聚合函数和 GROUP BY 就可以了,但是好吧,没关系 - 这只是例子)。
样本数据:
SQL> with
2 category (cat_id, name, c_order) as
3 -- lower C_ORDER is better
4 (select 1, 'Cat 1', 1 from dual union all
5 select 2, 'Cat 2', 2 from dual union all
6 select 3, 'Cat 3', 3 from dual
7 ),
8 employee (emp_id, name, cat_id) as
9 (select 100, 'Little', 2 from dual union all --> this
10 select 100, 'Little', 3 from dual union all
11 select 200, 'Foot' , 1 from dual union all --> this
12 select 200, 'Foot' , 3 from dual
13 ),
连接表并按代表类别“订单”的列对行进行排名;然后获取排名最高的行:
14 temp as
15 (select e.emp_id, e.name emp_name, c.name cat_name,
16 row_number() over (partition by e.emp_id order by c.c_order) rn
17 from employee e join category c on c.cat_id = e.cat_id
18 )
19 select t.emp_id, t.emp_name, t.cat_name
20 from temp t
21 where rn = 1;
EMP_ID EMP_NAME CAT_NAME
------------ ---------- ----------
100 Little Cat 2
200 Foot Cat 1
SQL>
如果那不是“它”,按照我一开始说的做:发布测试用例和期望的结果。