2017-02-13 76 views
-1

我敢肯定,这是一个简单的问题,但我觉得我一直在寻找这个很长时间没有任何进展。我正在尝试使用基于嵌套查询的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类,但它保持返回零。

任何帮助将不胜感激。

+1

Case表达式,而不是case语句。 – jarlh

+0

Ha Ha jarlh你舀了这个奖项,可能是我读过的最不有用的评论。谢谢 – Carlos80

+0

不客气! – jarlh

回答

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 
+0

感谢Tajinder为您的快速回复,这给了我第1行中我正在寻找的8478121,但同时在第2行中给了我417732,而不是将其限制在50000,因为MaxBand中有一个值。有任何想法吗? – Carlos80

+0

请确认我是否正确地得到您想要根据类别1上的最大波段获取类别2的Final_Company_Cost – Tajinder

+0

如果值大于MaxBand中的值,我想将Company_Cost拉入Final_Company_Cost if不通过MaxBand。所以我的最终值应该是第1行的8478121和第2行的50000。 – Carlos80

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 

通过逻辑有时大声交谈会帮助你找到你的表达错误。

+0

感谢弥敦道,我试图修改查询这种方式,但由于某种原因,我似乎无法通过ELSE MaxBand值拉。我的Final_Company_Cost通过了相关列中的所有值,并且看起来不会混淆在两者之间。因此,在您的示例中,第1行中的8478121和第2行中的417732而不是50000 – Carlos80

+0

第2行设置为大于50,000的417,732。无论您需要更改比较器逻辑还是修复第2行值列中的拼写错误。也许你打算在50万的最高乐队? – Nathan

+0

当然!感谢您指出明显,我一直盯着这个太久。我现在已经去了当MaxBand = 0然后Company_Cost Else MaxBand - 简单的时候你有第二双眼睛。谢谢。 – Carlos80

0

入住这里:

CASE WHEN Company_Cost > MaxBand THEN MaxBand 
     ELSE Company_Cost 
     END AS Final_Company_Cost