【问题标题】:Syntax error in Update statement with Case Calculations使用案例计算的更新语句中的语法错误
【发布时间】:2019-06-24 10:23:00
【问题描述】:

我正在尝试根据订单是在多个细分市场中,还是基于驾驶员类型在单个细分市场中计算驾驶员的薪酬百分比。我成功地测试了每个部分,但是 From 有一个红色下划线,并且在执行它时出现语法错误。这是我正在尝试的脚本:

update legheader
set lgh_extrainfo1 =  ( 
Select Case  When L.lgh_split_flag <> 'N' and L.lgh_carrier = 'UNKNOWN'
       Then Case 
            When 
            TR.trc_type1 = 'O/O' and TR.trc_type3 = '70Per'
            Then CAST (.7 * ((Cast (L.lgh_miles as decimal (10,2))/O.ord_totalmiles) * L.lgh_ord_charge)as decimal (10,2))
            When 
            TR.trc_type1 = 'O/O' and TR.trc_type3 <> '70Per'
            Then CAST (.64 * ((Cast (L.lgh_miles as decimal (10,2))/O.ord_totalmiles) * L.lgh_ord_charge)as decimal (10,2))


            When L.lgh_split_flag = 'N' and L.lgh_carrier = 'UNKNOWN' 
            Then Case
            When  
            TR.trc_type1 = 'O/O' and TR.trc_type3 = '70Per'
            Then CAST (.7 * L.lgh_ord_charge as decimal (10,2))
            When 
            TR.trc_type1 = 'O/O' and TR.trc_type3 <> '70Per'
            Then CAST (.64 * L.lgh_ord_charge as decimal (10,2))


        End    

From Legheader L Left Join TractorProfile TR on L.lgh_tractor = TR.trc_number
                 Left Join Orderheader O on O.ord_hdrnumber = L.ord_hdrnumber)

【问题讨论】:

  • 我看到三个CASE,但只有一个END
  • 我以为你可以有多个When和Then,只需要一个End。
  • 您可以在一个 CASE 中拥有多个 WHEN/THEN,但您在外部的 CASE 中还嵌套了 2 个 CASE。它们需要自己关闭,然后才能使用END 关闭外部。
  • 这会妨碍最终进行单一计算吗?还是会产生多个结果,例如 NULL?
  • 我将 End 添加到每个嵌套案例中,这消除了 From 下的红色下划线,但是当我执行时,我现在得到 Invalid Object Name 'Legheader' 任何想法为什么,它没有任何地方有红色标记吗?

标签: sql sql-server-2016 ssms-2016


【解决方案1】:

您可以尝试以下查询。在这里,您错过了嵌套 CASEEND 语句。

update legheader
set lgh_extrainfo1  =  ( 
Select Case  
When L.lgh_split_flag <> 'N' and L.lgh_carrier = 'UNKNOWN'
       Then 
       Case 
            When 
            TR.trc_type1 = 'O/O' and TR.trc_type3 = '70Per'
            Then CAST (.7 * ((Cast (L.lgh_miles as decimal (10,2))/O.ord_totalmiles) * L.lgh_ord_charge)as decimal (10,2))
            When 
            TR.trc_type1 = 'O/O' and TR.trc_type3 <> '70Per'
            Then CAST (.64 * ((Cast (L.lgh_miles as decimal (10,2))/O.ord_totalmiles) * L.lgh_ord_charge)as decimal (10,2))
         END
When L.lgh_split_flag = 'N' and L.lgh_carrier = 'UNKNOWN' 
         Then 
            Case
                When  
                TR.trc_type1 = 'O/O' and TR.trc_type3 = '70Per'
                Then CAST (.7 * L.lgh_ord_charge as decimal (10,2))
                When 
                TR.trc_type1 = 'O/O' and TR.trc_type3 <> '70Per'
                Then CAST (.64 * L.lgh_ord_charge as decimal (10,2))
            END

        End    

From Legheader L Left Join TractorProfile TR on L.lgh_tractor = TR.trc_number
                 Left Join Orderheader O on O.ord_hdrnumber = L.ord_hdrnumber)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多