0

我是 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'.

请帮忙解决

4

2 回答 2

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
于 2019-04-09T12:14:30.930 回答
0

首先,这里不需要使用 if 。您在选择列时有双重条件,那么最好使用 CASE 而不是 IF。您还使用了 LEFT JOIN 并保留了 iph.SalesInvoiceID 的 where 条件,如果它是 left join else left ,它应该在里面,并且在你的情况下是 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
于 2019-04-09T12:37:11.370 回答