select employee_id, case when mod(employee_id,2) = 1 and not like 'M%' then salary else 0 end as bonus from Employees;
时间: 2023-06-19 07:08:30 浏览: 54
这是一个 SQL 语句,用于查询 Employees 表中的 employee_id 和对应的 bonus。其中,如果 employee_id 是奇数且不以 M 开头,则 bonus 为该员工的 salary,否则 bonus 为 0。
需要注意的是,这里的 not like 'M%' 应该改为 not like 'M%', 即前面少了一个百分号。
相关问题
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY, CASE WHEN SALARY>=10000 THEN 'S' WHEN SALARY>=9000 THEN 'A' WHEN SALARY>=7000 THEN 'B' WHEN SALARY>=5000 THEN 'C' ELSE 'D' END '评价', FROM t_employees;这段代码有什么问题
在这段代码中,最后一个逗号后面有一个多余的冒号,应该将逗号删除。正确的代码如下所示:
```
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY,
CASE
WHEN SALARY >= 10000 THEN 'S'
WHEN SALARY >= 9000 THEN 'A'
WHEN SALARY >= 7000 THEN 'B'
WHEN SALARY >= 5000 THEN 'C'
ELSE 'D'
END '评价'
FROM t_employees;
```
此代码的功能是从表 t_employees 中选择 EMPLOYEE_ID、FIRST_NAME、SALARY 和评价字段,其中评价字段通过 CASE WHEN 语句根据 SALARY 的值进行计算。评价字段的值根据 SALARY 的大小被划分为 S、A、B、C、D 五个等级。
select dept_id,name,basic+bonus from salary inner join employees on salary.employee_id=employees.employee_id where dept_id=( select employee_id from employees where dept_id=( select dept_id from departments where dept_name='人事部' )) and year(date)=2018 and month(date)=12; ERROR 1242 (21000): Subquery returns more than 1 row
在这个SQL语句中,出现了错误“Subquery returns more than 1 row”,它通常表示子查询返回了多行数据。在这个情况下,问题在于第一个子查询返回了多个employee_id值,而不是单个值,因此无法将其用作外部查询中的条件。
为了解决这个问题,可以考虑使用IN运算符而不是等号来比较子查询返回的值。下面是修正后的SQL语句:
```
select s.dept_id, e.name, s.basic+s.bonus
from salary s
inner join employees e on s.employee_id = e.employee_id
where s.dept_id IN (
select employee_id from employees where dept_id = (
select dept_id from departments where dept_name = '人事部'
)
) and year(s.date) = 2018 and month(s.date) = 12;
```
在这个修正后的SQL语句中,我们使用IN运算符来比较子查询返回的值。这样就能够正确地查询部门名称为“人事部”、时间为2018年12月份的员工的工资信息。