Как заставить SQL обрабатывать строки как группу, а не одну за другой с условием IF раньше? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть следующий код в триггере, который работает разработан.Я хотел бы пойти дальше по этому правилу триггера, установив значение CommissionAmount равным 0,00, если в счете-фактуре есть 1 строка сведений о счете-фактуре, и изменив @IfMenu на другую букву.

ЕСЛИ детали счета, как, например, имеют более 1 строки, значение CommissionAmount должно быть равно 0,00, а @IfMenu может оставаться как «C».

Когда записи обрабатываются, IfMenu будет 'C'.Это должно измениться на 'M' для счетов, которые имеют только 1 InvoiceID в таблице InvoiceDetails.Когда InvoiceID имеет 2 или более InvoiceID в таблице InvoiceDetails, IfMenu может оставаться как C.

У меня возникает проблема, когда SQL обрабатывает строки в таблице InvoiceDetails, а InvoiceID '123' имеет 3 строки в первых 2строки изменятся на IfMenu 'M', а затем вернутся обратно к 'C', когда третья строка будет обработана из-за того, что последняя строка не соответствует критериям оператора IF.

Я хотел бы знать, как я могу сгруппировать строки в таблице InvoicesDetails, чтобы, если InvoiceID = '123' и их было больше 2, IfMenu оставалось бы как 'C'

Я попытался использовать курсор, хотя я не могу использовать курсор в этой базе данных из-за производительности.

Также попытался использовать @@ ROWCOUNT и не повезло!

   if (@SubmitTo = 2) and @ProductCode in ('3', '14') and @IfMenu in ('C','D') and @Branch = '9' and @CAmount <> 0.00 and @VendorNumber not in ( 'DEFAULT', '') and @VendorNumber is not null
   begin 
          update top (1) IfInvoiceDetails
          set    CommissionAmount = 0.00
          where InvoiceDetailID = @InvoiceDetailID         

          insert into tblInterfaceOverrides (InvoiceID,InvoiceDetailID,ActionTaken,OriCAmount, JobNumber) 
          values (@InvoiceID,@InvoiceDetailID,'Set Commission Amount to 0.00',@CAmount, 7) 
   end



            update top (1) IfInvoices 
            set IfMenu = 'M', Record = (select COALESCE(max(Record),0)+1 from IfInvoices where IfMenu = 'M')
            where IfInvoices.InvoiceID = @InvoiceID
...