0

最初の「;」の後に 1064 構文エラーが発生し続けます。最初の when ステートメントで。hereおよびhereからのヒントを無駄にしようとしました。誰か助けて?

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 //」で構文エラーが発生します。次の2つの回答の組み合わせは機能しますが、実際のコード自体がそのエラーをスローします...

4

2 に答える 2

2

声明を破るからです。

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.
于 2013-01-23T21:14:24.043 に答える
1

case 式は「end case」ではなく「end」で終わります。

末尾の「ケース」を削除します。

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 //
于 2013-01-23T21:19:12.400 に答える