2016-03-05 1 views
1

Je voudrais utiliser CASE QUAND ALORS dans WHERE ou la fonction agregat IIF ou autre chose qui fonctionne comme ceci:SQL SI MOINS ET UNE PLUS GRANDE QUE dans la clause WHERE

@iKapacitet 
AS 
SELECT ID, Name 
FROM Private-Accommodation 
WHERE [Private-Accommodation].[Otok]='Rab'AND 
IIF(@iKapacitet = 1,[Private-Accommodation].[maxPersons] < 3, 
IIF(@iKapacitet = 2, [Private-Accommodation].[maxPersons] < 3 AND [Private-Accommodation].[maxPersons] > 5, 
[Private-Accommodation].[maxPersons] BETWEEN 4 AND 6)) 
ORDER BY [Private-Accommodation].[RedniBr] 

S'il est plus facile avec CASE:

CASE @iKapacitet 
WHEN 1 THEN (CASE [Private-Accommodation].[maxBrOsoba] WHEN < 3) 
WHEN 2 THEN (CASE [Private-Accommodation].[maxBrOsoba] WHEN < 3 AND > 5) 
WHEN 3 THEN (CASE [Private-Accommodation].[maxPersons] BETWEEN 4 AND 6) 
END 
+0

pls indiquer votre question clairement afin que d'autres puissent vous aider – Rosetta

Répondre

2

Il est généralement plus clair de quitter la logique si/cas en dehors des clauses where. Vous pourriez envisager:

WHERE [Private-Accommodation].[Otok] = 'Rab' AND 
     ((@iKapacitet = 1 AND [Private-Accommodation].[maxPersons] < 3) OR 
     (@iKapacitet = 2 AND [Private-Accommodation].[maxPersons] < 3) AND [Private-Accommodation].[maxPersons] > 5) OR 
     (@iKapacitet NOT IN (1, 2) AND [Private-Accommodation].[maxPersons] BETWEEN 4 AND 6) 
    )