mysql 8 中 case 语句的替代方案
Alternatives to the case statement in mysql 8
我有以下两个table,
津贴 table,
employeeId title value Salary
14 Mobile 200 13000
14 Transport 7000 13000
代码 table,
title code
Transport A1
Mobile A2
Salary A3
我想要得到这样的结果,
employeeId title value code
14 Mobile 200 A2
14 Transport 7000 A1
14 Salary 13000 A3
我的查询如下,
select employeeId,title,CASE
WHEN title = 'Mobile' THEN 'A1'
WHEN title = 'Transport' THEN 'A2'
ELSE 'A3'
END as AllowancesCode,
value
from Reports where employeeId = 14 ;
可以预见,这会遗漏 Salary 字段,
employeeId title AllowancesCode value
14 Mobile A1 200
14 Transport A2 7000
编辑
数据更清晰,
一个员工可以有不同价值的不同津贴,但工资是固定的,只会是一个价值。具有另一个 employeeid 的另一个雇员可能有相同的薪水。一个 employeeId 将具有一个 salary 值。
我不会争论 table 结构,它可能不是最理想的。
我认为你最好为“移动”和“交通”做一个连接,然后用联合查询工资。
薪水值在每一行都重复,是否相同?
这样的东西应该可以工作
SELECT A.employeeId, A.title, A.value, B.code
FROM Allowance A INNER JOIN Codes B ON (A.title=B.title)
WHERE A.employeeId = 14
UNION
SELECT A.employeeId," Salary" as title, max(A.basicSalary) as value, B.code
FROM Allowance A INNER JOIN Codes B ON (B.title="basicSalary")
WHERE A.employeeId = 14
GROUP BY 1,2,4
如果您不想在数据不是太多的情况下使用 2,您可以创建一个视图或简单地执行以下操作:
SELECT * FROM (
SELECT A.employeeId, A.title, A.value, B.code
FROM Allowance A INNER JOIN Codes B ON (A.title=B.title)
UNION
SELECT A.employeeId," Salary" as title, max(A.basicSalary) as value, B.code
FROM Allowance A INNER JOIN Codes B ON (B.title="basicSalary")
GROUP BY 1,2,4
) X
WHERE X.employeeId=14
我有以下两个table,
津贴 table,
employeeId title value Salary
14 Mobile 200 13000
14 Transport 7000 13000
代码 table,
title code
Transport A1
Mobile A2
Salary A3
我想要得到这样的结果,
employeeId title value code
14 Mobile 200 A2
14 Transport 7000 A1
14 Salary 13000 A3
我的查询如下,
select employeeId,title,CASE
WHEN title = 'Mobile' THEN 'A1'
WHEN title = 'Transport' THEN 'A2'
ELSE 'A3'
END as AllowancesCode,
value
from Reports where employeeId = 14 ;
可以预见,这会遗漏 Salary 字段,
employeeId title AllowancesCode value
14 Mobile A1 200
14 Transport A2 7000
编辑
数据更清晰,
一个员工可以有不同价值的不同津贴,但工资是固定的,只会是一个价值。具有另一个 employeeid 的另一个雇员可能有相同的薪水。一个 employeeId 将具有一个 salary 值。
我不会争论 table 结构,它可能不是最理想的。
我认为你最好为“移动”和“交通”做一个连接,然后用联合查询工资。
薪水值在每一行都重复,是否相同? 这样的东西应该可以工作
SELECT A.employeeId, A.title, A.value, B.code
FROM Allowance A INNER JOIN Codes B ON (A.title=B.title)
WHERE A.employeeId = 14
UNION
SELECT A.employeeId," Salary" as title, max(A.basicSalary) as value, B.code
FROM Allowance A INNER JOIN Codes B ON (B.title="basicSalary")
WHERE A.employeeId = 14
GROUP BY 1,2,4
如果您不想在数据不是太多的情况下使用 2,您可以创建一个视图或简单地执行以下操作:
SELECT * FROM (
SELECT A.employeeId, A.title, A.value, B.code
FROM Allowance A INNER JOIN Codes B ON (A.title=B.title)
UNION
SELECT A.employeeId," Salary" as title, max(A.basicSalary) as value, B.code
FROM Allowance A INNER JOIN Codes B ON (B.title="basicSalary")
GROUP BY 1,2,4
) X
WHERE X.employeeId=14