条件检查(瀑布顺序)[重复]

问题描述 投票:0回答:1

场景如下: 根据某些条件,每个员工都属于多个类别。这些类别有顺序。在检查员工的类别时,如果他属于类别 1,我们不应该检查其他类别。如果他不属于类别 1 而他属于类别 2 那么我们不应该检查其他类别等等。我们如何在 SELECT 子句中写入它?

我无法考虑开始时的查询。

sql oracle greatest-n-per-group
1个回答
0
投票

如果贴出测试用例就更好了;没有它,我们必须自己弄清楚,所以-这是我的尝试,但没有多大意义(不需要加入

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>

如果那不是“它”,按照我一开始说的做:发布测试用例和期望的结果。

© www.soinside.com 2019 - 2024. All rights reserved.