问题描述
我有以下两个表,
津贴表,
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