J'ai essayé de chercher, mais je n'ai rien trouvé qui puisse m'aider.
J'essaye de faire ceci en SQL:
declare @locationType varchar(50);
declare @locationID int;
SELECT column1, column2
FROM viewWhatever
WHERE
CASE @locationType
WHEN 'location' THEN account_location = @locationID
WHEN 'area' THEN xxx_location_area = @locationID
WHEN 'division' THEN xxx_location_division = @locationID
Je sais que je ne devrais pas avoir à mettre '= @locationID' à la fin de chacun d'eux, mais je ne peux pas obtenir la syntaxe même près d'être correcte. SQL continue de se plaindre de mon '=' sur la première ligne WHEN ...
Comment puis-je faire ceci?
sql
switch-statement
case
Miles
la source
la source
sans déclaration de cas ...
la source
DECLARE @locationType NVARCHAR(50) = 'youchoose' IF @locationType = 'location' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (account_location = @locationID) END IF @locationType = 'area' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (xxx_location_area = @locationID) END IF @locationType = 'division' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (xxx_location_division = @locationID) END
Voici.
la source
Je dirais que c'est un indicateur d'une structure de table défectueuse. Peut-être que les différents types d'emplacement devraient être séparés dans différentes tables, ce qui vous permet d'effectuer des requêtes beaucoup plus riches et d'éviter également d'avoir des colonnes superflues.
Si vous ne parvenez pas à modifier la structure, quelque chose comme ci-dessous peut fonctionner:
Et ainsi de suite ... Nous ne pouvons pas changer la structure de la requête à la volée, mais nous pouvons la remplacer en égalisant les prédicats.
EDIT: Les suggestions ci-dessus sont bien sûr bien meilleures, ignorez les miennes.
la source
Le problème avec ceci est que lorsque le moteur SQL va évaluer l'expression, il vérifie la partie FROM pour extraire les tables appropriées, puis la partie WHERE pour fournir des critères de base, de sorte qu'il ne peut pas correctement évaluer une condition dynamique sur quelle colonne vérifier contre.
Vous pouvez utiliser une clause WHERE lorsque vous vérifiez les critères WHERE dans le prédicat, tels que
Ainsi, dans votre cas particulier, vous devrez placer la requête dans une procédure stockée ou créer trois requêtes distinctes.
la source
L'opérateur OR peut être une alternative au cas où la condition
la source
Veuillez essayer cette requête. Réponse au message ci-dessus:
la source
Essaye ça:
la source
la source
la source
Essayez cette requête. C'est très facile à comprendre:
la source