2015-11-13 4 views
-1

Мне нужно получить записи из таблицы в зависимости от посещенных дней. Как я могу достичь этого, исправив запрос ниже? Он имеет синтаксическую ошибку (ошибки). Я знаю, что синтаксис неверен, но он даст вам представление о том, чего я хочу достичь.Дело с более чем одним условием

DECLARE @PatientByDate INT 
SET @PatientByDate = 30 
    SELECT * FROM Visits 
    WHERE 
    CASE 
      WHEN(@PatientByDate = 90) then DaysVisited > 90 
      WHEN(@PatientByDate = 60) then DaysVisited >= 60 AND DaysVisited < 90 
      WHEN(@PatientByDate = 30) then DaysVisited >= 30 AND DaysVisited < 60 
      WHEN(@PatientByDate = 25) then DaysVisited < 30 
      WHEN(@PatientByDate = 0) then -500 AND <= 5000000 
     END 
+0

Проверить http://stackoverflow.com/questions/24254164/sql-case-when-and – MusicLovingIndianGirl

+2

'CASE' ** не ** утверждение - это ** выражение ** (которое может вернуть один из возможных значения). Вы ** не можете ** вернуть «кодовые блоки» или условия из «CASE» - только одно атомное значение. –

ответ

3

ли она непосредственно совмещая предикаты с or:

SELECT * FROM Visits 
WHERE 
    (@PatientByDate = 90 and DaysVisited > 90) or 
    (@PatientByDate = 60 and DaysVisited >= 60 and DaysVisited < 90) or 
    (@PatientByDate = 30 and DaysVisited >= 30 and DaysVisited < 60) or 
    (@PatientByDate = 25 and DaysVisited < 30) or 
    (@PatientByDate in(0, -500)) 
0

Вы должны переместить их все статьи о Когда и сопоставьте его возвращаемое значение (= 1):

DECLARE @PatientByDate INT 
SET @PatientByDate = 30 
SELECT * FROM Visits 
WHERE 1 = CASE 
    WHEN(@PatientByDate = 90) AND DaysVisited > 90 then 1 
    WHEN(@PatientByDate = 60) AND DaysVisited >= 60 AND DaysVisited < 90 then 1 
    WHEN(@PatientByDate = 30) AND DaysVisited >= 30 AND DaysVisited < 60 then 1 
    WHEN(@PatientByDate = 25) AND DaysVisited < 30 then 1 
    WHEN(@PatientByDate = 0) AND -500 AND <= 5000000 then 1 
END 

или просто:

DECLARE @PatientByDate INT 
SET @PatientByDate = 30 
SELECT * FROM Visits 
WHERE 
    ((@PatientByDate = 90) AND DaysVisited > 90) OR 
    ((@PatientByDate = 60) AND DaysVisited >= 60 AND DaysVisited < 90) OR 
    ((@PatientByDate = 30) AND DaysVisited >= 30 AND DaysVisited < 60) OR 
    ((@PatientByDate = 25) AND DaysVisited < 30) OR 
    ((@PatientByDate = 0) AND -500 AND <= 5000000) 
Смежные вопросы