mysql 8中case语句的替代方法

问题描述

我有以下两个表,

津贴表,

employeeId    title    value       Salary   
  14          Mobile    200         13000    
  14          Transport 7000        13000   

代码表,

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 ;

可以预料的是,这在薪金字段中错了

 employeeId title   AllowancesCode  value
   14       Mobile      A1           200
   14      Transport    A2          7000

编辑

数据更加清晰

一个雇员可以有不同的津贴,价值各不相同,但是工资是固定的,只能是一个价值。具有另一个employeeid的另一名雇员可能具有相同的薪水。一个employeeId将具有一个薪水值。

解决方法

我不会讨论表结构,这可能不是最佳选择。

我认为您最好对“移动”和“运输”进行联接,然后再与工会查询工资。

薪水值是否在每一行上都重复,是否相同? 这样的事情应该起作用

    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,B.code 
           FROM Allowance A INNER JOIN Codes B ON (A.title=B.title)
        UNION
        SELECT A.employeeId,B.code
           FROM Allowance A INNER JOIN Codes B ON (B.title="basicSalary")
           GROUP BY 1,4
    ) X
    WHERE X.employeeId=14