Plusieurs conditions de l'AFFAIRE états
J'ai besoin d'interroger des données. voici la requête que j'ai construite, mais qui n'est pas workig bien pour moi. Pour cet exemple, je suis en utilisant la base de données AdventureWorks.
SELECT * FROM [Purchasing].[Vendor] WHERE PurchasingWebServiceURL LIKE
case
// In this case I need all rows to be returned if @url is '' or 'ALL' or NULL
when (@url IS null OR @url = '' OR @url = 'ALL') then ('''%'' AND PurchasingWebServiceURL IS NULL')
//I need all records which are blank here including nulls
when (@url = 'blank') then (''''' AND PurchasingWebServiceURL IS NULL' )
//n this condition I need all record which are not like a particular value
when (@url = 'fail') then ('''%'' AND PurchasingWebServiceURL NOT LIKE ''%treyresearch%''' )
//Else Match the records which are `LIKE` the input value
else '%' + @url + '%'
end
Ce n'est pas de travail pour moi. Comment puis-je avoir plusieurs où clauses de conditions dans le THEN
de la même CASE
? Comment puis-je faire ce travail?
OriginalL'auteur pavanred | 2010-06-13
Vous devez vous connecter pour publier un commentaire.
Une autre façon sur la base d'amadan:
Son essentiellement: condition 1 condition ou 2 ou de la condition 3, ou (!condition1 et !condition2 et !condition3 et de la condition 4) Pas de problème =)
OriginalL'auteur kamahl
Ce n'est pas un couper-coller. Le
CASE
expression doit retourner une valeur, et que vous voulez retourner une chaîne de caractères contenant SQL (ce qui est techniquement une valeur, mais d'un mauvais type). C'est ce que tu voulais écrire, je pense:Je pense aussi que cela pourrait ne pas fonctionner dans certains dialectes, mais ne peux pas tester maintenant (Oracle, je suis à la recherche à vous), en raison de ne pas avoir des booléens.
Cependant, depuis
@url
ne dépend pas des valeurs de la table, pourquoi ne pas faire trois requêtes différentes, et de choisir d'évaluer basé sur votre paramètre?OriginalL'auteur Amadan