带有名称和empID的Oracle Case语句

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

我有两个表,一个表包含工程师的角色类型,第二个表是emp表。

我的Primary_eng和secondary_ENG列包含EMP_ID,我需要名称而不是EMP_ID。

MY Employee表包含名称为FIRST NAME和LAST NAME。我还想传递一个带有ENG名称的参数。

我的状况:

CASE WHEN (PRIMARY_ENG = :P_DBA AND secondary_ENG != :P_DBA) THEN 1 
            WHEN (PRIMARY_ENG != :P_DBA AND secondary_ENG = :P_DBA) THEN 2 
            ELSE 3 END
sql oracle
1个回答
2
投票

欢迎使用堆栈溢出!正如其他用户指出的那样,请考虑发布更多详细信息,例如:

  • 表的结构
  • 样本数据
  • 预期输出

根据您提供的有限信息,假设以下内容:1.您有一个employee表,其中包含emp_idfirst_namelast_name

|EMP_ID |FIRST_NAME |LAST_NAME  |
|100    |John       |Smith      |
|200    |Peter      |Scott      |
|300    |Priyank    |Bhasin     |

2.您有一组角色(例如表role_types),每个角色都有一个主工程师的emp_id(primary_eng)和一个副工程师的emp_id(secondary_eng

|ROLE_TYPE  |PRIMARY_ENG    |SECONDARY_ENG  |
|DBA        |100            |200            |
|DEV        |200            |300            |
|TESTER     |300            |100            |

3.通过传递emp_id,您需要:(a)员工的全名(b)一个自定义参数,该参数是基于优先级的员工被分配的角色列表

解决方案:

  • 您可以通过将名字和姓氏连接在一起的两个表来获取工程师的名字
  • 您定义的参数也可以使用两个表的直接连接获取
select r.role_type,
e.first_name||' '||e.last_name as engineer_name,
CASE WHEN (PRIMARY_ENG = 100 AND secondary_ENG != 100) THEN 1 
            WHEN (PRIMARY_ENG != 100 AND secondary_ENG = 100) THEN 2 
            ELSE 3 END as my_param
from role_types r
  join employee e on r.primary_eng = e.emp_id
  order by 3
;  

输出:

|ROLE_TYPE  |ENGINEER_NAME  |MY_PARAM   |
|DBA        |John Smith     |1          |
|TESTER     |Priyank Bhasin |2          |
|DEV        |Peter Scott    |3          |

示范here如果这不起作用,请使用其他详细信息来完善您的问题如果这符合您的要求,请随时转到acceptvote

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