我有两个表,一个表包含工程师的角色类型,第二个表是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
欢迎使用堆栈溢出!正如其他用户指出的那样,请考虑发布更多详细信息,例如:
根据您提供的有限信息,假设以下内容:1.您有一个employee
表,其中包含emp_id
,first_name
和last_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 |