【问题标题】:Writing SQL code with greater than and less than functions使用大于和小于函数编写 SQL 代码
【发布时间】:2019-04-12 13:18:57
【问题描述】:

当我尝试运行这段代码时:

`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`

我收到一条错误消息,提示“> 附近的语法不正确”,并将我带到第一个有 > 的实例。然后当我将鼠标悬停在上面时,我第一次收到错误时它还提到了一个“布尔函数”。

我希望这段代码根据上述条件返回颜色值。

【问题讨论】:

  • MySql 不使用 T-Sql - 只有 Sybase 和 SQL Server 使用它。请确定您正在使用的数据库并编辑标签。

标签: mysql sql tsql


【解决方案1】:

ISNULL 只接受一个参数,在 MySQL 中返回 1 或 0。您可能正在寻找IFNULL。 此外,使用 0 作为 NULL 替换是一个坏主意,因为你会得到除以 0。

【讨论】:

    【解决方案2】:

    我猜你想要标准的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
    

    我没有发现您的查询有任何明显错误。一种可能性是该职位周围的不良性格。有时只需重新输入代码即可解决问题。

    【讨论】:

      【解决方案3】:

      这个把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
      

      【讨论】:

        猜你喜欢
        • 2020-04-29
        • 2011-12-21
        • 1970-01-01
        • 2020-11-26
        • 2016-07-16
        • 2021-08-31
        • 2014-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多