簡體   English   中英

嵌套 IIF 語句問題

[英]Nested IIF statement issue

這是整個聲明:

(IIF(i.AvgMonthlyCostOfSales<1,1,(IIF(i.AvgMonthlyCostOfSales)) * (i.StockTurnoverCoefitient-n.OVER_SECOND_RANGE))<0,0,(i.AvgMonthlyCostOfSales) * (i.StockTurnoverCoefitient-n.OVER_SECOND_RANGE) Loss

並得到錯誤:

在預期條件的上下文中指定的非布爾類型的表達式,靠近 '('。

我想要得到的是:如果i.AvgMonthlyCostOfSales值小於一,給我一個,否則:如果i.AvgMonthlyCostOfSales(i.StockTurnoverCoefitient-n.OVER_SECOND_RANGE)小於零,給我零。 否則給我乘積。

你的括號有點瘋狂。 也許將它放在單獨的行中,用於條件真假:

   IIF( 
     i.AvgMonthlyCostOfSales<1, 
     1,
     IIF(
       i.AvgMonthlyCostOfSales * (i.StockTurnoverCoefitient-n.OVER_SECOND_RANGE)<0,
       0, 
       i.AvgMonthlyCostOfSales * (i.StockTurnoverCoefitient-n.OVER_SECOND_RANGE)
     ) 
   ) Loss

如果您的 SQLserver 支持 GREATEST,那么執行起來可能會更簡單:

   IIF( 
     i.AvgMonthlyCostOfSales<1, 
     1,
     GREATEST(0, i.AvgMonthlyCostOfSales * (i.StockTurnoverCoefitient-n.OVER_SECOND_RANGE))
   ) Loss

ps; 用縮進列出你的原始語句可以很容易地看出哪里出了問題:

(
  IIF(
    i.AvgMonthlyCostOfSales<1,
    1,
    (
      IIF(
        i.AvgMonthlyCostOfSales
      )
    ) * (i.StockTurnoverCoefitient-n.OVER_SECOND_RANGE)
  )<0,
  0,
  (i.AvgMonthlyCostOfSales) * (i.StockTurnoverCoefitient-n.OVER_SECOND_RANGE) Loss

它不會回到縮進級別 0,並且您已經)IIF配對,這是一個沒有布爾條件且沒有真/假等的IIF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM