【问题标题】:SQL Modify returned select value without unionSQL修改返回的选择值没有联合
【发布时间】:2023-03-23 13:08:01
【问题描述】:

我正在尝试编写一个 SQL 语句,该语句按员工编号、姓名、job_id 和根据他们的 job_id 修改的薪水返回员工列表。如果员工是 VP,则 SELECT 语句应返回增加 %20 的薪水,但如果他们是 MAN,则应返回增加 %30 的薪水。是否可以在没有工会的情况下返回两种不同的修改工资?这是我目前所拥有的。

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');

【问题讨论】:

  • 我认为您的意思是LIKE 'VP% 表示以 VP 和其他内容开头,现在表示以 VP 结尾或以 MAN 结尾。
  • @Juan Carlos Oropeza:也许这就是结构。所以它可以是任何“男人”,例如“超人”或“女人”;-)
  • @ThorstenKettner 这正好证明了我的观点;)
  • 是的,它是结构,这就是我使用通配符的原因。

标签: sql select oracle-sqldeveloper


【解决方案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

【讨论】:

    【解决方案2】:

    更简单:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多