[英]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.