我确信这是一个简单的问题,但我觉得我已经看了这么久,现在没有任何进展。我正在尝试使用基于嵌套查询的CASE语句计算最终列。
SELECT ID,Category, MaxBand, MinBand, Value, Company_Cost,
CASE WHEN Company_Cost > MaxBand THEN MaxBand
ELSE Company_Cost
END AS Final_Company_Cost
FROM
(
SELECT ID, Category, MaxBand, MinBand, Value,
CASE WHEN (Value - MinBand) > 0 THEN (Value- MinBand)
ELSE 0
END AS Company_Cost
FROM #TempTable
) T1
我正在查看的表数据如下:
ID Category MaxBand MinBand Value Company_Cost Final_Comapny_Cost
11548 1 0 0 8478121 8478121 0
11548 2 50000 0 417732 417732 50000
基本上我正在尝试使Final_Company_Cost列有8478121和50000,因为类别1上没有Max Band,但它一直返回零。
任何帮助都会非常感激。
答案 0 :(得分:0)
希望,我理解你的问题。
请检查以下查询是否可以帮助您查找内容。
SELECT ID,Category, MaxBand, MinBand, Value, Company_Cost,
CASE
WHEN Company_Cost > MaxBand THEN Company_Cost ELSE MaxBand -- changed here
END AS Final_Company_Cost FROM
(SELECT ID,Category, MaxBand, MinBand, Value,
CASE
WHEN (Value - MinBand) > 0 THEN (Value- MinBand) ELSE 0
END AS Company_Cost
FROM #TempTable) T1
答案 1 :(得分:0)
让我们看一下你的CASE
表达式逻辑。
CASE WHEN Company_Cost > MaxBand THEN MaxBand
ELSE Company_Cost
END AS Final_Company_Cost
在英语中,您说当company_cost值大于MaxBand值时,则返回MaxBand值。如果没有,请返回company_cost值。
对于您的示例,如果它大于MaxBand,您希望返回company_cost值。这意味着CASE
表达式应更新为:
CASE WHEN Company_Cost > MaxBand THEN Company_Cost
ELSE MaxBand
END AS Final_Company_Cost
有时大声朗读逻辑会帮助你找到表达中的错误。
答案 2 :(得分:0)
点击此处:
CASE WHEN Company_Cost > MaxBand THEN MaxBand
ELSE Company_Cost
END AS Final_Company_Cost