别名CASE声明

时间:2018-06-12 15:32:51

标签: mysql sql

我需要你的帮助来解决我面临的问题..我正在使用CASE函数并通过在“END”之后添加“AS'RESULT'”来对其结果进行别名化。

虽然查询似乎正在运行,但我仍然通过phpmyadmin收到以下警告:

无法识别的关键字(靠近AS)

意外的令牌(靠近'RESULT')

我不知道为什么我会这样......我很感激你的帮助以突出我的错误; - )

            SELECT
            app_fd_List_of_components.c_component,
            app_fd_List_of_orders.c_package,
            app_fd_List_of_orders.c_status,
            app_fd_List_of_orders.dateCreated,
            app_fd_List_of_orders.c_orderId,
            app_fd_List_of_orders.Id,
            temptablename.datetime AS Int_Date,
            temptablename2.datetime AS Prdw3_Date,
            @counterStatus := IF(
            app_fd_List_of_orders.c_status <> 'Deployment completed',
            IF(
            temptablename.datetime IS NOT NULL,
            'Counting',
            'Initializing'
            ),
            'Complete'
            ) AS 'Counter_status',
            @counter := IF(
            app_fd_List_of_orders.c_status <> 'Deployment completed',
            IF(
            temptablename.datetime IS NOT NULL,
            (
            35 - DATEDIFF(
            CURRENT_DATE(), temptablename.datetime)
            ),
            'n/a'
            ),
            DATEDIFF(
            temptablename2.datetime,
            temptablename.datetime
            )
            ) AS 'Counter',


            CASE (WHEN(
            (@counterStatus = 'Counting') AND(@counter < 0)
            ) THEN "black" WHEN(
            (@counterStatus = 'Counting') AND(@counter > 5)
            ) THEN "green" WHEN(
            (@counterStatus = 'Counting') AND(-1 < @counter < 5)
            ) THEN "orange" WHEN(
            (@counterStatus = 'Complete') AND(@counter > 35)
            ) THEN "black" WHEN(
            (@counterStatus = 'Complete') AND(@counter < 35)
            ) THEN "green" ELSE "n/a")
            END AS 'RESULT'


            FROM
            app_fd_List_of_orders
            JOIN app_fd_List_of_components ON 
            app_fd_List_of_orders.c_component = app_fd_list_of_components.id
            LEFT JOIN(
            SELECT app_form_data_audit_trail.datetime,
            app_form_data_audit_trail.data
            FROM
            app_form_data_audit_trail
            WHERE
            SUBSTRING_INDEX(
            SUBSTRING_INDEX(
            app_form_data_audit_trail.data,
            '"opdetails":"',
            -1
            ),
            '"',
            1
            ) = 'int'
            ) AS temptablename
            ON
            app_fd_list_of_orders.c_orderid = SUBSTRING_INDEX(
            SUBSTRING_INDEX(
            temptablename.data,
            '"orderId":"',
            -1
            ),
            '"',
            1
            )
            LEFT JOIN(
            SELECT app_form_data_audit_trail.datetime,
            app_form_data_audit_trail.data
            FROM
            app_form_data_audit_trail
            WHERE
            SUBSTRING_INDEX(
            SUBSTRING_INDEX(
            app_form_data_audit_trail.data,
            '"opdetails":"',
            -1
            ),
            '"',
            1
            ) = 'prdw3'
            ) AS temptablename2
            ON
            app_fd_list_of_orders.c_orderid = SUBSTRING_INDEX(
            SUBSTRING_INDEX(
            temptablename2.data,
            '"orderId":"',
            -1
            ),
            '"',
            1
            )

1 个答案:

答案 0 :(得分:1)

您是否尝试删除CASE语句周围的括号?

CASE
    WHEN @counterStatus = 'Counting' AND @counter < 0 THEN "black" 
    WHEN @counterStatus = 'Counting' AND @counter > 5 THEN "green" 
    WHEN @counterStatus = 'Counting' AND -1 < @counter < 5 THEN "orange" 
    WHEN @counterStatus = 'Complete' AND @counter > 35 THEN "black" 
    WHEN @counterStatus = 'Complete' AND @counter < 35 THEN "green" 
    ELSE "n/a"
 END AS 'RESULT'
编辑:我也不确定这是可能的:

WHEN @counterStatus = 'Counting' AND -1 < @counter < 5 THEN "orange"

可能需要写成:

WHEN @counterStatus = 'Counting' AND -1 < @counter AND @counter < 5 THEN "orange"