我是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'.
请帮助解决该问题
答案 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