Я пытаюсь получить оператор CASE
, работающий внутри оператора IN
, где первые 2 условия приведут к 1 возможному результату, а третье приведет к 2 возможным исходам. Вот почему я использую CASE
. Вот SQL, который у меня есть:
DECLARE @startDate date, @endDate date
DECLARE @AptTpye varchar(1)
SET @startDate = '2/17/2020'
SET @endDate = '2/18/2020'
-- 1 = Receiving : 2 = Shipping : 3 = Both
SET @AptTpye = 1
SELECT SAR.AppointmentID, SAR.LoadID, SAR2.DateValue [Check In], SAR3.EnteredOn [Scale In], SAR.LoadID + '*,', SAR.AppointmentType
FROM dbo.SAR_AppointmentMaster AS SAR
LEFT JOIN dbo.SAR_AppointmentTimes AS SAR2 ON SAR2.AppointmentID = SAR.AppointmentID AND SAR2.DateType = 'CHECKIN'
LEFT JOIN dbo.SAR_AppointmentWeights AS SAR3 ON SAR3.AppointmentID = SAR.AppointmentID AND SAR3.WeightType = 'SCALEIN'
WHERE SAR2.DateValue BETWEEN @startDate AND @endDate
AND SAR.AppointmentType IN(CASE @AptTpye
WHEN '1' THEN 1
WHEN '2' THEN 2
WHEN '3' THEN (1, 2)
END)
Я ошибаюсь? Или есть способ заставить это работать?
Я также попробовал это:
SELECT SAR.AppointmentID, SAR.LoadID, SAR2.DateValue [Check In], SAR3.EnteredOn [Scale In], SAR.LoadID + '*,', SAR.AppointmentType
FROM dbo.SAR_AppointmentMaster AS SAR
LEFT JOIN dbo.SAR_AppointmentTimes AS SAR2 ON SAR2.AppointmentID = SAR.AppointmentID AND SAR2.DateType = 'CHECKIN'
LEFT JOIN dbo.SAR_AppointmentWeights AS SAR3 ON SAR3.AppointmentID = SAR.AppointmentID AND SAR3.WeightType = 'SCALEIN'
WHERE SAR2.DateValue BETWEEN @startDate AND @endDate
AND (CASE @AptTpye
WHEN '1' THEN SAR.AppointmentType = 1
WHEN '2' THEN SAR.AppointmentType = 2
WHEN '3' THEN SAR.AppointmentType IN(1, 2)
END)
Ни одна из версий не работает. Ошибки первой версии в строке WHEN '3' THEN
и ошибки второй в первой строке WHEN
.