Я новичок в 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'.
Пожалуйста, помогите решить ее
Используйте оператор Case вместо оператора If. Существует разница между операторами IF и CASE в SQL. Операторы 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
Вы сделали трудные вещи, теперь добавьте пару строк, чтобы объяснить разницу между case и if.
CASE
— это выражение. Разница между выражением и оператором тонкая, но важная, особенно в этом сценарии. См. эта почта.
Прежде всего, здесь не требуется использовать if. у вас есть двойное условие при выборе столбца, тогда предпочтительнее использовать 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
Возможный дубликат Как выполнить IF...THEN в SQL SELECT?