2017-10-20 65 views
1

我想编写一个SQL语句,根据他们的job_id,通过员工编号,姓名,job_id和修改的工资返回雇员列表。如果雇员是副总裁,则SELECT语句应该返回一个增加20%的薪水,但是如果他们是MAN,则应该返回一个薪水增加30%的薪水。是否有可能在没有工会的情况下返还两种不同的修改薪水?这是迄今为止我所拥有的。SQL修改返回的选择值没有工会

SELECT 'Employee ', EMPLOYEE_ID, 
'named ', FIRST_NAME || ' ' || LAST_NAME AS "Full Name", 
'with Job ID of ', JOB_ID, 
'will have a new salary of ', SALARY 
FROM EMPLOYEES 
WHERE ROUND(SALARY*1.2,2) IN (SELECT ROUND(SALARY*1.2,2) 
FROM EMPLOYEES 
WHERE JOB_ID LIKE '%VP') 
OR ROUND(SALARY*1.3,2) IN (SELECT ROUND(SALARY*1.3,2) 
FROM EMPLOYEES 
WHERE JOB_ID LIKE '%MAN'); 
+0

我想你的意思'LIKE“VP%'是不是意味着开始与VP和别的东西,现在意味着以“VP”结尾或以“MAN”结尾。 –

+1

@Juan Carlos Oropeza:也许这就是结构。所以它可以是任何'人',例如'SUPERMAN'或'WOMAN';-) –

+0

@ThorstenKettner这只是证明我的观点;) –

回答

1

你可以使用一个case表达:

SELECT 'Employee ', EMPLOYEE_ID, 
     'named ', FIRST_NAME || ' ' || LAST_NAME AS "Full Name", 
     'with Job ID of ', JOB_ID, 
     'will have a new salary of ', 
     salary * CASE WHEN job_id LIKE '%VP' THEN 1.2 
        WHEN job_id LIKE '%MAN' THEN 1.3 
        ELSE 1 
       END 
FROM EMPLOYEES 
1

这是更简单:

SELECT 
    'Employee ', 
    employee_id, 
    'named ', 
    first_name || ' ' || last_name AS "Full Name", 
    'with Job ID of ', 
    job_id, 
    'will have a new salary of ', 
    CASE 
    WHEN job_id LIKE '%VP' THEN salary * 1.2 
    WHEN job_id LIKE '%MAN' THEN salary * 1.3 
    ELSE salary 
    END AS modified_salary 
FROM employees;