2017-10-20 24 views
1

J'essaie d'écrire une instruction SQL qui renvoie une liste d'employés par numéro d'employé, nom, job_id et un salaire modifié en fonction de leur job_id. Si un employé est un VP, l'instruction SELECT doit renvoyer un salaire avec une augmentation de 20%, mais s'il s'agit d'un homme, il doit retourner un salaire avec une augmentation de 30%. Est-il possible de retourner deux salaires modifiés différents sans syndicat? Voici ce que j'ai jusqu'ici.SQL Modify a renvoyé la valeur select sans union

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

Je pense que vous voulez dire 'LIKE « VP% 'cela signifie commencer par VP et autre chose, signifie maintenant la fin avec 'VP' ou se termine avec' MAN'. –

+1

@Juan Carlos Oropeza: Peut-être que c'est la structure. Donc, cela pourrait être n'importe quel 'HOMME', par ex. 'SUPERMAN' ou 'WOMAN' ;-) –

+0

@ThorstenKettner Cela prouve juste mon point de vue;) –

Répondre

1

Vous pouvez utiliser une expression 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

Il est beaucoup plus simple:

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;