Использование CASE внутри IN, чтобы дать возможность нескольких int - PullRequest
1 голос
/ 17 февраля 2020

Я пытаюсь получить оператор 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.

1 Ответ

1 голос
/ 17 февраля 2020

Вы, кажется, хотите этот логин c:

(SAR.AppointmentType = @AptType OR
 @AptType = 3 AND SAR.AppointmentType IN (1, 2)
)

Я не вижу причин для @AptType, чтобы быть строкой.

Примечание: Если у вас есть только два типа встреч то это делает то же самое:

(SAR.AppointmentType = @AptType OR
 @AptType = 3 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...