返回零的嵌套案例声明

时间:2017-02-13 14:11:27

标签: sql

我确信这是一个简单的问题,但我觉得我已经看了这么久,现在没有任何进展。我正在尝试使用基于嵌套查询的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,但它一直返回零。

任何帮助都会非常感激。

3 个答案:

答案 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