Синтаксическая ошибка в операторе обновления с расчетом случаев - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь рассчитать процент оплаты для водителей, основываясь на том, что заказ состоит из нескольких сегментов, или одного сегмента в зависимости от типа водителя.Я успешно тестирую каждую часть, но 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)

1 Ответ

0 голосов
/ 31 января 2019

Вы можете попробовать следующий запрос.Здесь вы пропустите оператор END для вложенного CASE.

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)
...