Правильное использование предложения IF ELSE в SQL Server 2012 - PullRequest
0 голосов
/ 09 апреля 2019

Я новичок в SQL и хочу выполнить оператор, если условие истинно, и другой оператор, если ложь.

Запрос SQL Server 2012

select

   if s.SpecialInsttPlan = 'No' 

   BEGIN
        (s.TotalBill - s.Advance) / s.Installments as Installment 
   else
         'Special' as Installment 
   END
from
   SalesInvoice s 
   left join
      InstallmentPaymentHistory iph 
      on iph.SalesInvoiceID = s.SalesInvoiceID 
where
   iph.SalesInvoiceID = 41 
group by
   s.TotalBill,
   s.Advance,
   s.Installments

Мой запрос заканчивается следующими ошибками

Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'if'.
Msg 102, Level 15, State 1, Line 4
Incorrect syntax near 's'.

Пожалуйста, помогите разрешить его

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Использование оператора Case вместо If.There есть разница между оператором IF и CASE в SQL. Если операторы используются для выполнения шагов sql в пакете, а оператор case определяет, какое значение использовать в столбце оператора select

 SELECT
    CASE WHEN s.SpecialInsttPlan = 'No' 
        THEN(s.TotalBill - s.Advance) / s.Installments 
        ELSE 'Special' 
    END As Installment 
FROM SalesInvoice s 
LEFT JOIN InstallmentPaymentHistory iph 
    ON iph.SalesInvoiceID = s.SalesInvoiceID 
WHERE iph.SalesInvoiceID = 41 
GROUP BY
    s.TotalBill,
    s.Advance,
    s.Installments
0 голосов
/ 09 апреля 2019

Прежде всего, здесь не обязательно использовать. у вас есть двойное условие в выборе столбца, тогда предпочтительнее использовать CASE вместо IF. также вы использовали LEFT JOIN и сохранили там, где условие для iph.SalesInvoiceID должно быть внутри, если осталось соединение, остальное осталось и где INNER JOIN в вашем случае.

SELECT 
   CASE WHEN s.SpecialInsttPlan = 'No'  THEN  (s.TotalBill - s.Advance) / s.Installments ELSE 'Special' AS Installment
   FROM SalesInvoice s
   LEFT JOIN  InstallmentPaymentHistory iph ON iph.SalesInvoiceID = s.SalesInvoiceID AND iph.SalesInvoiceID = 41 
   group by
   s.TotalBill,
   s.Advance,
   s.Installments
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...