【问题标题】:mysql case/when statement within proceduremysql case/when语句在过程中
【发布时间】:2013-01-07 12:11:45
【问题描述】:

在第一个“;”之后我不断收到 1064 语法错误在第一个 when 语句中。我尝试了来自herehere 的提示,但无济于事。帮助任何人?

DELIMITER //

CREATE PROCEDURE `test` ()
BEGIN
    SELECT *,
        case 
        when variable_1 between 0.75 and 4     then 4;
        when variable_1 between 0    and 0.74  then "<4";
        when variable_1 between 4.1  and 365  then ">4";
        end case as variable_2;
END //

答案后的修正问题:

实际代码:

DELIMITER //

CREATE PROCEDURE `infant_outcomes`.`new_procedure` ()
BEGIN
SELECT * FROM CDI

        INNER JOIN


    -- CDI subquery grouping and filtering 
    (SELECT CDI.subj_CDI as subj_CDI_grouping, Min(hearing_age_CDI) min_hearing_age_CDI,
    case 
    when CDI.hearing_age_CDI between 1.75 and 4.25 then 3
    when CDI.hearing_age_CDI between 4.75 and 7.25 then 6

    end as hearing_age_CDI_group
    FROM CDI
    group by CDI.subj_CDI, hearing_age_CDI_group
    ORDER BY CDI.subj_CDI, CDI.hearing_age_CDI ASC) CDI_filtered

        on
            CDI.subj_CDI = subj_CDI_grouping
            AND CDI.hearing_age_CDI = CDI_filtered.min_hearing_age_CDI

    where hearing_age_CDI_group is not null
    ORDER BY 
    CDI.subj_CDI, CDI_filtered.hearing_age_CDI_group
END //

我在“End //”处遇到语法错误虽然以下两个答案的组合有效,但实际代码本身会引发该错误...

【问题讨论】:

    标签: mysql mysql-workbench


    【解决方案1】:

    因为你打破了陈述。

    SELECT *,
        case 
        when variable_1 between 0.75 and 4     then "4"
        when variable_1 between 0    and 0.74  then "<4"
        when variable_1 between 4.1  and 365  then ">4"
        end as variable_2;
    

    你错过了分号

    ORDER BY 
    CDI.subj_CDI, CDI_filtered.hearing_age_CDI_group;
                                                    ^________ this.
    

    【讨论】:

    • 谢谢--示例代码有效,上面粘贴的“实际”代码不...想法?
    • @user996544 我在回答中告诉过,您在每个when 条件之后都有;,但整个CASE 都在声明中(从CASE 到END)。同样是第一次当/然后你错过了报价。
    【解决方案2】:

    case 表达式以“end”结尾,而不是“end case”。

    删除尾随的“大小写”:

    DELIMITER //
    
    CREATE PROCEDURE `test` ()
    BEGIN
        SELECT *,
            case 
            when variable_1 between 0.75 and 4     then 4;
            when variable_1 between 0    and 0.74  then "<4";
            when variable_1 between 4.1  and 365  then ">4";
            end as variable_2; -- "case" removed
    END //
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2016-12-10
      相关资源
      最近更新 更多