oracle WHERE子句中存在CASE WHEN

pkwftd7m  于 2022-11-03  发布在  Oracle
关注(0)|答案(3)|浏览(318)

我想打印所有雇员的姓名,以及该雇员是否出现在表中。
| 员工标识|名称|
| - -|- -|
| 一个|艾伦|
| 2个|最大值|
| 三个|本|
| 员工标识|EC代码|
| - -|- -|
| 一个|配置_1|
| 2个|配置_2|
| 三个|配置_1|
查询:

SELECT 
    ename, 
    (CASE 
         WHEN EXISTS (SELECT 1 FROM m_emp_config ec 
                      WHERE ec_code = 'CONFIG_1' AND emp_id = emp.emp_id) 
             THEN 'Y' 
             ELSE 'N' 
     END) config
FROM 
    emp emp

我们可以把CASE WHEN EXISTS写在WHERE子句中而不是那里吗?
我是SQL新手,请帮助我。
SQL语句的预期输出:
| 名称|配置|
| - -|- -|
| 艾伦|Y型|
| 最大值|不|
| 本|Y型|

9rbhqvlz

9rbhqvlz1#

您目前的查询是正确的,可以透过exists执行此作业。以下是使用左链接的替代版本:

SELECT DISTINCT
    e.ENAME,
    CASE WHEN ec.EMP_ID IS NOT NULL THEN 'Y' ELSE 'N' END AS CONFIG
FROM emp e
LEFT JOIN m_sys.m_emp_config ec
    ON ec.EMP_ID = e.EMP_ID AND
       ec.ec_code = 'CONFIG_1'
ORDER BY e.EMP_ID;
ruarlubt

ruarlubt2#

使用Decode陈述式
SELECT雇员名称,DECODE(经济部门代码,'配置1','Y','N')AS配置FROM雇员JOIN m_雇员配置经济ON经济雇员标识=雇员标识ORDER BY雇员标识;
使用Case陈述式
如果econ.ec为'Config_1',则为'Y',否则为'N',则结束AS配置FROM雇员m_雇员配置经济ON经济雇员标识=雇员标识ORDER BY雇员标识;

njthzxwz

njthzxwz3#

您也可以使用DECODE来取代CASE WHEN建构。

SELECT DISTINCT
e.ename, 
DECODE(ec.ec_code,NULL, 'N','Y') AS config
FROM emp e
LEFT JOIN m_emp_config ec
ON ec.emp_id = e.emp_id AND
ec.ec_code = 'Config_1'
ORDER BY e.emp_id;

相关问题