编写单条SQL语句,基于两张员工表生成2017年月度薪资报表
生成2017年员工分月薪资报表的SQL解决方案
没问题,这就帮你搞定这个薪资报表的需求,思路和代码如下:
核心逻辑说明
要实现按员工编号、姓名分月份展示薪资的效果,我们需要两步操作:
- 合并数据源:用
UNION ALL把两张表的薪资数据整合到一起(两张表的月份没有重叠,不需要去重处理),只保留我们需要的字段; - 行转列处理:通过
CASE WHEN配合聚合函数,把每个员工的月度薪资转换成独立列展示,再按员工编号和姓名分组,确保每个员工只显示一行结果。
完整SQL查询语句
SELECT code, Name, MAX(CASE WHEN Month = 'April' THEN Salary ELSE NULL END) AS Apr_Salary, MAX(CASE WHEN Month = 'May' THEN Salary ELSE NULL END) AS May_Salary, MAX(CASE WHEN Month = 'June' THEN Salary ELSE NULL END) AS June_Salary, MAX(CASE WHEN Month = 'July' THEN Salary ELSE NULL END) AS July_Salary FROM ( -- 合并两张表的薪资数据,只保留需要的字段 SELECT code, Name, Salary, Month, Year FROM employee_1 UNION ALL SELECT code, Name, Salary, Month, Year FROM employee_2 ) AS combined_data WHERE Year = 2017 -- 筛选出2017年的数据 GROUP BY code, Name -- 按员工编号和姓名分组 ORDER BY code; -- 按员工编号排序
预期输出结果
执行上述SQL后,会得到如下格式的薪资报表:
| code | Name | Apr_Salary | May_Salary | June_Salary | July_Salary |
|---|---|---|---|---|---|
| 1 | A | 2000 | 1000 | 1200 | 4000 |
| 2 | B | 3000 | 1150 | 1150 | 3500 |
内容的提问来源于stack exchange,提问作者Gulshan Sonwar
相关产品推荐
相关产品推荐

