嘿伙计们我想在Access中运行这个查询/计算字段,这是我想做的事情:
If(Salaries.Amount > 20000) { If(Salaries.Amount > 30000) { If(Salaries.Amount > 40000) { Permits.Band = "Band 4"; } Else { Permits.Band = "Band 3"; } } Else { Permits.Band = "Band 2"; } } Else { Permits.Band = "Band 1"; }
工资和许可证是表格,数据库中有另外两个表格 - 汽车和员工。
Salaries/Staff are linked by Staff_ID: 1 to 1, Staff/Permits are linked by Staff_ID: 1 to 1, Permits/Cars are linked by Permit_ID: 1 to M.
基本上,许可证中的“乐队”字段需要根据工作人员的工资来计算......薪水必须与工作人员的详细信息分开,因此工资表......
有什么想法吗?
编辑:
回答答案1:
SELECT Switch(Salaries.Amount > 40000, "Band 4", Salaries.Amount > 30000, "Band 3", Salaries.Amount > 20000, "Band 2", True, "Band 1") AS Band FROM (Staff INNER JOIN (Permits INNER JOIN Cars ON Permits.Perm_ID = Cars.Perm_ID) ON Staff.Staff_ID = Permits.Staff_ID) INNER JOIN Salaries ON Staff.Staff_ID = Salaries.Staff_ID;
运行时“表达式中的类型不匹配”...
答案 0 :(得分:4)
请参阅“交换机功能的访问”帮助主题。
Switch(expr-1,value-1 [,expr-2,value-2 ... [,expr-n,value-n]])
“表达式从左到右进行计算,并返回与第一个表达式相关联的值以评估为True。”
SELECT Switch(Salaries.Amount > 40000, "Band 4",
Salaries.Amount > 30000, "Band 3",
Salaries.Amount > 20000, "Band 2",
True, "Band 1") AS band
FROM [your tables expression];
更新:我针对Salaries表构建并测试了Switch语句,其中Amount字段是数字数据类型。除非您的金额字段不是数字,否则我会检查您的FROM子句。此查询是否正常运行?
SELECT *
FROM (Staff INNER JOIN (Permits INNER JOIN Cars
ON Permits.Perm_ID = Cars.Perm_ID) ON Staff.Staff_ID = Permits.Staff_ID)
INNER JOIN Salaries ON Staff.Staff_ID = Salaries.Staff_ID;
答案 1 :(得分:2)
如果你想要一些不太硬编码的东西,你可以把乐队放在一个新的表中(列:id / name,lower,upper)。
最低的“下限”应该为零,每个后续的“下限”应该与之前的“上限”完全相同,最后的“上限”应该是一个巨大的数字,代表无限。
然后加入这样的东西:
select whatever
from salaries s
inner join band b on b.lower <= s.amount and b.upper > s.amount
如果salaries.amount可以为null,那么你将不得不使用左外连接并专门处理该情况。