将 mysql 行转换为包含数据的自定义列
Transposing mysql rows into customized column with data
我在 mysql
中关注 table
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
不确定我的查询是否正确。
任何帮助表示赞赏。
您想在 case 语句中使用像 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。
使用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;
这里假设每个员工每个月只有一个工资条目。如果可能有多个条目,则应使用带有 SUM()
的原始 CASE
表达式而不是 MAX()
.
我在 mysql
中关注 tableemp_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
不确定我的查询是否正确。 任何帮助表示赞赏。
您想在 case 语句中使用像 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。
使用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;
这里假设每个员工每个月只有一个工资条目。如果可能有多个条目,则应使用带有 SUM()
的原始 CASE
表达式而不是 MAX()
.