Existing Tables: Projects - projectID - name - rate Shifts - shiftID (PK) - projectID (FK) - name - startTime - rate [Shifts] ID projectID userID shift startTime baseRate addition 1 1 1 Shift A 1900-01-01 08:00:00.000 15.00 10% 1 1 1 Shift B 1900-01-01 17:00:00.000 15.00 2 [Projects] ID project rate 1 Project A 10
逻辑:移位率由两个字段(基线+加法)组成,其中[加法]可以是百分比或固定金额。我有一个SELECT查询来确定需要应用的正确速率,但有一个错误:
当[加法]为固定金额时,基本费率会增加而不是添加
SELECT CASE WHEN ISNULL(s.rate,0) = 0 THEN p.rate ELSE s.rate END * CASE WHEN CHARINDEX('%',s.addition)>0 THEN (1+CAST(REPLACE(s.addition,'%','') AS FLOAT)/100) ELSE 1+CAST(ISNULL(s.addition,0) AS FLOAT) END AS finalRate FROM Projects p INNER JOIN Shifts s ON p.ID = s.projectID
所以,我需要修改这一行** ELSE 1 + CAST(ISNULL(sw.addition,0)AS FLOAT)**
请注意,查询代码段是更大查询的一部分,因此无法进行太多更改。
答案 0 :(得分:0)
变化:
ELSE 1+CAST(ISNULL(s.addition,0) AS FLOAT)
为:
ELSE (CASE WHEN ISNULL(s.rate,0) = 0 THEN p.rate ELSE s.rate END +
CAST(ISNULL(s.addition,0) AS FLOAT)) / CASE WHEN ISNULL(s.rate,0) = 0 THEN p.rate ELSE s.rate END
基于公式:
如果你有15作为率和2作为加法,你想得到17与乘法。那么,你应该乘以15来得到17?
15 * x = 15 + 2
x = (15 + 2) / 15
另一个选择是改变案例陈述的顺序:
SELECT CASE WHEN CHARINDEX('%',s.addition)>0
THEN CASE WHEN ISNULL(s.rate,0) = 0 THEN p.rate ELSE s.rate END * (1+CAST(REPLACE(s.addition,'%','') AS FLOAT)/100)
ELSE CASE WHEN ISNULL(s.rate,0) = 0 THEN p.rate ELSE s.rate END + CAST(ISNULL(s.addition,0) AS FLOAT)
END
AS finalRate
FROM Projects p
INNER JOIN Shifts s ON p.ID = s.projectID