能否用SQL视图实现员工薪资行转列?如何操作?
用SQL视图实现员工薪资数据行列转换
原员工表数据
| id | empid | sal_type | salary |
|---|---|---|---|
| 4 | 2 | var | 9000 |
| 3 | 2 | fixed | 5000 |
| 2 | 1 | var | 6000 |
| 1 | 1 | fixed | 10000 |
期望输出
| empid | Fixed | VAR |
|---|---|---|
| 1 | 10000 | 6000 |
| 2 | 5000 | 9000 |
当然可以用SQL视图实现这个需求,核心是把行列转换的查询逻辑封装成视图即可。以下是两种适配不同数据库的实现方案:
方案1:CASE WHEN + GROUP BY(通用所有SQL数据库)
这种写法兼容性拉满,支持MySQL、PostgreSQL、SQL Server等几乎所有主流数据库:
CREATE VIEW emp_salary_pivot AS SELECT empid, MAX(CASE WHEN sal_type = 'fixed' THEN salary END) AS Fixed, MAX(CASE WHEN sal_type = 'var' THEN salary END) AS VAR FROM 员工表名 GROUP BY empid;
方案2:PIVOT语法(适用于SQL Server、Oracle等支持PIVOT的数据库)
如果你的数据库支持PIVOT运算符,可使用更简洁的语法:
CREATE VIEW emp_salary_pivot AS SELECT empid, Fixed, VAR FROM ( SELECT empid, sal_type, salary FROM 员工表名 ) AS src PIVOT ( MAX(salary) FOR sal_type IN ([fixed] AS Fixed, [var] AS VAR) ) AS pvt;
创建完成后,直接查询视图就能得到目标结果:
SELECT * FROM emp_salary_pivot;
内容的提问来源于stack exchange,提问作者Nimmi Mimlu
相关产品推荐
相关产品推荐

