繁体   English   中英

SQL Union均引发SQL语法错误,但两个SELECT都可以

[英]SQL Union all throws SQL Syntax error but the two SELECTS are ok

我想加入2条SELECT语句。 它们都可以单独正常工作,但是如果我尝试使用Union All,则会出现语法错误:

[42000] [1064]您的SQL语法错误; 检查与您的MySQL服务器版本相对应的手册,以在第29行的''附近使用正确的语法

这对我来说毫无意义。 我搜索了该错误消息,但在该行中未使用引号(29是UNION ALL)

SELECT NULL                                                        AS id,
       table_a.calendar_day                             AS
       calendar_day,
       'XXX'                                                       AS mbr_entity
       ,
       'total'                                                    AS
       product,
       'total'                                                    AS
       mbr_stock_category,
       'total'                                                    AS component,
       SUM(IF(table_a.mbr_entity = 'XXX', aim, 0))      AS aim,
       SUM(IF(table_a.mbr_entity = 'XXX', cf, 0))       AS cf,
       SUM(IF(table_a.mbr_entity = 'XXX', mbr, 0))      AS mbr,
       SUM(IF(table_a.mbr_entity = 'XXX', ytd, 0))      AS ytd,
       SUM(IF(table_a.mbr_entity = 'XXX', forecast, 0)) AS forecast,
       SUM(table_b.a
           + table_b.b
           + table_b.c
           + table_b.d
           + table_b.e)                    AS actual
FROM   table_a
       left join table_b
              ON table_b.calendar_day =
                 table_a.calendar_day
                 AND table_b.mbr_entity =
                     table_a.mbr_entity
WHERE MONTH(table_a.calendar_day) = MONTH(CURRENT_DATE())
GROUP  BY calendar_day
UNION ALL
SELECT NULL                                                        AS id,
       table_a.calendar_day,
       table_a.mbr_entity,
       'total'                                                    AS product,
       'total'                                                    AS
       mbr_stock_category,
       'total'                                                    AS component,
       SUM(IF(table_a.mbr_entity = 'XXX', 0, aim))      AS aim,
       SUM(IF(table_a.mbr_entity = 'XXX', 0, cf))       AS cf,
       SUM(IF(table_a.mbr_entity = 'XXX', 0, mbr))      AS mbr,
       SUM(IF(table_a.mbr_entity = 'XXX', 0, ytd))      AS ytd,
       SUM(IF(table_a.mbr_entity = 'XXX', 0, forecast)) AS forecast,
       SUM(table_b.a
           + table_b.b
           + table_b.c
           + table_b.d
           + table_b.e)                    AS actual
FROM   table_a
       left join table_b
              ON table_b.calendar_day =
                 table_a.calendar_day
                 AND table_b.mbr_entity =
                     table_a.mbr_entity
WHERE  table_a.mbr_entity <> 'XXX'
AND MONTH(table_a.calendar_day) = MONTH(CURRENT_DATE())
GROUP  BY calendar_day,
          mbr_entity

再次尝试使用代码

( SELECT NULL AS
    id,
    table_a.calendar_day AS calendar_day,
    'XXX' AS mbr_entity,
    'total' AS product,
    'total' AS mbr_stock_category,
    'total' AS component,
    SUM( IF ( table_a.mbr_entity = 'XXX', aim, 0 ) ) AS aim,
    SUM( IF ( table_a.mbr_entity = 'XXX', cf, 0 ) ) AS cf,
    SUM( IF ( table_a.mbr_entity = 'XXX', mbr, 0 ) ) AS mbr,
    SUM( IF ( table_a.mbr_entity = 'XXX', ytd, 0 ) ) AS ytd,
    SUM( IF ( table_a.mbr_entity = 'XXX', forecast, 0 ) ) AS forecast,
    SUM( table_b.a + table_b.b + table_b.c + table_b.d + table_b.e ) AS actual 
    FROM
        table_a
        LEFT JOIN table_b ON table_b.calendar_day = table_a.calendar_day 
        AND table_b.mbr_entity = table_a.mbr_entity 
    WHERE
        MONTH ( table_a.calendar_day ) = MONTH ( CURRENT_DATE ( ) ) 
    GROUP BY
        calendar_day 
    ) 
    UNION ALL
    (
    SELECT NULL AS
        id,
        table_a.calendar_day,
        table_a.mbr_entity,
        'total' AS product,
        'total' AS mbr_stock_category,
        'total' AS component,
        SUM( IF ( table_a.mbr_entity = 'XXX', 0, aim ) ) AS aim,
        SUM( IF ( table_a.mbr_entity = 'XXX', 0, cf ) ) AS cf,
        SUM( IF ( table_a.mbr_entity = 'XXX', 0, mbr ) ) AS mbr,
        SUM( IF ( table_a.mbr_entity = 'XXX', 0, ytd ) ) AS ytd,
        SUM( IF ( table_a.mbr_entity = 'XXX', 0, forecast ) ) AS forecast,
        SUM( table_b.a + table_b.b + table_b.c + table_b.d + table_b.e ) AS actual 
    FROM
        table_a
        LEFT JOIN table_b ON table_b.calendar_day = table_a.calendar_day 
        AND table_b.mbr_entity = table_a.mbr_entity 
    WHERE
        table_a.mbr_entity <> 'XXX' 
        AND MONTH ( table_a.calendar_day ) = MONTH ( CURRENT_DATE ( ) ) 
    GROUP BY
        calendar_day,
    mbr_entity 
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM