在SQL Server 2012中正确使用IF ELSE子句

时间:2019-04-09 12:12:33

标签: sql-server

我是SQL的新手,如果条件为true,则要执行一条语句,如果为false,则要执行另一条语句。

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 个答案:

答案 0 :(得分:1)

使用Case语句代替If。SQL中的IF和CASE语句之间存在区别。If语句用于批量运行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

答案 1 :(得分:0)

首先,在这里不需要使用。您在选择列时有双重条件,那么最好使用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