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