【问题标题】:Incorrect Syntax error with If statementsIf 语句的语法错误
【发布时间】:2015-09-08 05:01:24
【问题描述】:

我正在尝试创建一个 If 语句,如果项目超过 100K 或公司名为 CGELENA 或 CGFEDUN,则该语句将查找并列出以下值,如果不是,则检查商品类型是否在下面列出

If (ord_miscqty >='100000' OR m.cmp_id in('CGELENA','CGFEDUN')
    Begin
    Select 
    ord_number
        ,ord_status
        ,m.cmp_name
        ,Ord_startdate
        ,ord_miscqty AS [FreightValue]
        ,c.car_ins_cargolimits AS [CargoAmount]
        ,o.ord_carrier AS [Carrier]
        ,l.NAME AS [LSM2]
        ,c.car_iccnum AS [MCNumber]
        ,o.ord_description AS [Commodity]
        ,f.cmd_code [Commody Code]
        ,(
            SELECT t.ta_quantity
            FROM trlaccessories AS t
            WHERE o.ord_carrier = t.ta_trailer
                AND t.ta_type = 'POWER'
            ) AS [PowerUnits]
        ,(
            SELECT n.not_text
            FROM notes AS n
            WHERE n.nre_tablekey = o.ord_carrier
                AND n.not_type = 'I'
            ) AS [Note]
        ,(
            SELECT n.last_updatedatetime
            FROM notes AS n
            WHERE n.nre_tablekey = o.ord_carrier
                AND n.not_type = 'I'
            ) AS [NoteDate]
        ,(
            SELECT q.caq_type
            FROM carrierqualifications AS q
            WHERE o.ord_carrier = q.caq_id
                AND q.caq_type = 'RES'
            ) AS [Restriction]
        ,(
            SELECT n.not_expires
            FROM notes AS n
            WHERE n.nre_tablekey = o.ord_carrier
                AND n.not_type = 'I'
            ) AS [NoteExp]
    FROM orderheader AS o
    INNER JOIN carrier AS c ON o.ord_carrier = c.car_id
    INNER JOIN company AS m ON o.ord_billto = m.cmp_id
    INNER JOIN labelfile AS l ON o.ord_revtype3 = l.abbr
    join stops as s on s.ord_hdrnumber = o.ord_hdrnumber
    join FREIGHTDETAIL as f on f.stp_number = s.stp_number
    Where datediff(hour, getdate(), ord_startdate) > 0
        AND ord_status IN (
            'PLN'
            ,'DSP'
            )
        AND l.labeldefinition = 'RevType3'
    End 

    Else If
    f.cmd_code in ('COPSUL',
    'HAZMOLY',
    'COPANO',
    'COPCAN',
    'COPING',
    'COPPAN',
    'COPPER',
    'COPROD',
    'COPSTSHT',
    'COPSULNH',
    'APPLINCS',
    'LIQUOR') 
    Begin
    Select 
    ord_number
        ,ord_status
        ,m.cmp_name
        ,Ord_startdate
        ,ord_miscqty AS [FreightValue]
        ,c.car_ins_cargolimits AS [CargoAmount]
        ,o.ord_carrier AS [Carrier]
        ,l.NAME AS [LSM2]
        ,c.car_iccnum AS [MCNumber]
        ,o.ord_description AS [Commodity]
        ,f.cmd_code [Commody Code]
        ,(
            SELECT t.ta_quantity
            FROM trlaccessories AS t
            WHERE o.ord_carrier = t.ta_trailer
                AND t.ta_type = 'POWER'
            ) AS [PowerUnits]
        ,(
            SELECT n.not_text
            FROM notes AS n
            WHERE n.nre_tablekey = o.ord_carrier
                AND n.not_type = 'I'
            ) AS [Note]
        ,(
            SELECT n.last_updatedatetime
            FROM notes AS n
            WHERE n.nre_tablekey = o.ord_carrier
                AND n.not_type = 'I'
            ) AS [NoteDate]
        ,(
            SELECT q.caq_type
            FROM carrierqualifications AS q
            WHERE o.ord_carrier = q.caq_id
                AND q.caq_type = 'RES'
            ) AS [Restriction]
        ,(
            SELECT n.not_expires
            FROM notes AS n
            WHERE n.nre_tablekey = o.ord_carrier
                AND n.not_type = 'I'
            ) AS [NoteExp]
    FROM orderheader AS o
    INNER JOIN carrier AS c ON o.ord_carrier = c.car_id
    INNER JOIN company AS m ON o.ord_billto = m.cmp_id
    INNER JOIN labelfile AS l ON o.ord_revtype3 = l.abbr
    join stops as s on s.ord_hdrnumber = o.ord_hdrnumber
    join FREIGHTDETAIL as f on f.stp_number = s.stp_number
    Where datediff(hour, getdate(), ord_startdate) > 0
        AND ord_status IN (
            'PLN'
            ,'DSP'
            )
        AND l.labeldefinition = 'RevType3'
    End 

【问题讨论】:

  • 第一行缺少)
  • 您使用什么 RDBMS?其中一些可能在常规查询的上下文中不支持IF/ELSE 控制结构,而只允许在存储过程/函数中使用它们。 [] 括号表示可能是 MS SQL Server 或 Access。
  • 天哪,你写了这么一个怪物,找不到缺少的括号??

标签: sql syntax


【解决方案1】:

在 else 语句中你必须使用 SELECT

Else If
Select f.cmd_code in ('COPSUL',...
....

【讨论】:

    猜你喜欢
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2010-10-02
    相关资源
    最近更新 更多