我在mysql中有以下表格
emp_id month salary
1 Jan 2000
1 Feb 2000
1 March 2000
2 Jan 3000
2 Feb 3000
2 March 3000
我想得到如下结果:
emp_id Jan_sal feb_sal Mar_sal
1 2000 2000 2000
2 3000 3000 3000
我的查询:
select emp_id,
(case when month = 'Jan' then salary else NUll end ) jan_sal,
(case when month = 'Feb' then salary else NUll end ) feb_sal,
(case when month = 'March' then salary else NUll end ) march_sal
from emp group by emp_id;
但我得到的输出为:
emp_id jan_sal feb_sal march_sal
1 2000 NULL NULL
2 3000 NULL NULL
不确定我的查询是否正确。 任何帮助表示赞赏。
答案 0 :(得分:1)
您希望在案例陈述中使用SUM
或MAX
等汇总函数
select emp_id,
sum(case when month = 'Jan' then salary else NUll end ) jan_sal,
sum(case when month = 'Feb' then salary else NUll end ) feb_sal,
sum(case when month = 'March' then salary else NUll end ) march_sal
from emp
group by emp_id;
如果同一员工有多个工资(可能是其他福利等),那么您必须决定是否要添加所有工资或仅采用最大值并使用SUM或MAX。
答案 1 :(得分:1)
使用MAX()
功能进行转动:
SELECT emp_id,
MAX(CASE WHEN month = 'Jan' THEN salary END) AS jan_sal,
MAX(CASE WHEN month = 'Feb' THEN salary END) AS feb_sal,
MAX(CASE WHEN month = 'March' THEN salary END) AS march_sal
FROM emp
GROUP BY emp_id;
这假设每个员工每月只有一个工资条目。如果可能有多个条目,则使用原始CASE
表达式时应使用SUM()
代替MAX()
。