使用大于和小于函数编写sql代码

sycxhyv7  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(441)

尝试运行此代码时:

`SELECT 
CASE WHEN a.promotionflag=0 THEN 'NoPromotion' 
WHEN (Sales)/ISNULL(Margin,0) > -3.0000 
AND (Sales)/ISNULL(Funding, 0) < 0 THEN 'RED'
WHEN (Sales) <0 THEN 'RED'
WHEN (Sales)= 0 and (Margin) <0 then 'RED'
WHEN (Sales)/ISNULL(Margin, 0) >= 0 THEN 'GREEN'
WHEN (Sales) IS NULL THEN 'NonPriority'
WHEN (Margin) IS NULL THEN 'NonPriority'
ELSE 'YELLOW' 
END AS Promotions`

我收到一个错误,说“附近的语法不正确>”,并把我带到第一个示例中有>。当我徘徊在这个问题上时,我第一次收到错误时,它也提到了一个“布尔函数”
我希望这段代码返回我的颜色值基于上述条件。

nszi6y05

nszi6y051#

ISNULL 在mysql中只接受一个参数并返回1或0。你可能在找 IFNULL . 另外,使用0作为null替换是一个坏主意,因为您将得到除0。

34gzjxbg

34gzjxbg2#

我猜你想要标准的 NULLIF() 防止被零除的函数。此版本的查询应该可以工作:

SELECT (CASE WHEN a.promotionflag = 0 THEN 'NoPromotion' 
             WHEN Sales/NULLIF(Margin, 0) > -3.0000 AND (Sales)/NULLIF(Funding, 0) < 0 THEN 'RED'
             WHEN Sales < 0 THEN 'RED'
             WHEN Sales = 0 and Margin < 0 THEN 'RED'
             WHEN Sales/NULLIF(Margin, 0) >= 0 THEN 'GREEN'
             WHEN Sales IS NULL THEN 'NonPriority'
             WHEN Margin IS NULL THEN 'NonPriority'
             ELSE 'YELLOW' 
       END) AS Promotions

我看你的问题没有什么明显的问题。一种可能是在那个位置周围有个坏角色。有时只要重新输入代码就可以解决问题。

s71maibg

s71maibg3#

将isnull更改为ifnull:

Set @promotionflag=-1;
set @Margin = 4.0000;
set @Sales = 3;
set @Funding = 4;
SELECT 
CASE WHEN @promotionflag=0 THEN 'NoPromotion' 
WHEN (@Sales)/(IFNULL(@Margin,0)) > -3.0000 AND (@Sales)/(IFNULL(@Funding, 0)) < 0 THEN 'RED'
WHEN (@Sales) <0 THEN 'RED'
WHEN (@Sales)= 0 and (@Margin) <0 then 'RED'
WHEN (@Sales)/(IFNULL(@Margin, 0)) >= 0 THEN 'GREEN'
WHEN (@Sales) IS NULL THEN 'NonPriority'
WHEN (@Margin) IS NULL THEN 'NonPriority'
ELSE 'YELLOW' 
END AS Promotions

相关问题