J'ai besoin de sélectionner des lignes en fonction du paramètre '@hotlist'.
Quand '@hotlist' = 'Oui' J'ai besoin de tirer toutes les lignes où le champ "co.ro_hotlist" contient la valeur de "oui" Quand '@hotlist' = 'Non', j'ai besoin de tirer toutes les lignes où le champ "co.ro_hotlist" détient la valeur de 'NO' ou NULL P>
Je peux sélectionner les lignes où la valeur est "oui "Ou" non "juste basé sur le paramètre, mais ne peut pas comprendre comment sélectionner également les lignes NULL lorsque le paramètre est« non ». Comment puis-je modifier le code fourni pour y parvenir? P>
J'ai essayé d'utiliser une déclaration de cas dans la clause WHERE mais sans chance. p>
4 Réponses :
Essayez ceci dans le suivant:
ISNULL(co.ro_HotList,'No') = @HotList
Cette déclaration réussirait-elle toujours le champ Co.ro_Hotlist si les valeurs sont «oui» ou «non»?
@Justinwade. Oui. Isnull évaluera l'expression comme valeur réelle que si elle est nulle, le résultat est la deuxième entrée.
La regroupement est une autre façon de le faire. La regroupement évalue la première valeur non nommée.
Keith Réponse est la bonne, mais pour la complétude, vous mentionnez que vous essayez case code> et il faut faire comment utiliser
en utilisant code> xxx pré>. p>
Vous pouvez écrire la condition de filtrage comme indiqué ci-dessous:
SELECT ds.* FROM Rotex_DailyShipmentNotShip ds left outer join CRM_MSCRM..SalesOrder co ON ds.SOP#=co.Name WHERE @HotList = 'Yes' and co.ro_HotList = 'Yes' OR @HotList = 'No' and (co.ro_HotList = 'No' or co.ro_HotList is null)
Vous avez probablement besoin de parenthèses à séparer ou à des conditions
@Juancarlosoropeza et code> a une priorité supérieure à celle de
ou code>, il devrait donc fonctionner comme prévu. Cependant, je suis d'accord que cela pourrait être plus clair pour le lecteur occasionnel.
Plusieurs réponses à la question de l'OP sont valides car elles renvoient les résultats escomptés, mais la plupart d'entre eux sont inefficaces car ils empêchent une utilisation appropriée de l'indice.
joint à des noms de colonne dans des expressions telles que des expressions ou des fonctions de case SQL d'utiliser index. p>
prédicats avec ou les conditions de l'opérateur et des paramètres empêchent également un plan d'exécution efficace. P>
Il existe plusieurs façons de construire la requête de manière efficace: p>
ajoutez une colonne calculée forte> p> Ajoutez une colonne calculée telle que: p> alter Table Ajouter une hotliste comme ISnull (ro_hotlist, 'Non') P> < p> et indexer cela. La requête sera alors plus simple et expectorale: p> où hotlist = @hotlist p> L'application client pourrait être assez intelligent pour faire ce qui suit (pseudocode) p> au lieu d'exécuter un Énoncé unique de sélection, exécuté un lot avec logique p> Vous pouvez créer une procédure stockée qui effectue la même logique que le deuxième lot de T-SQL précédant P> Ajout d'option (recompiler) p> Ajout d'une option (recompilation) à la réponse à l'impalaire conduit à de meilleurs plans d'exécution pouvant utiliser des index, mais empêche également la réutilisation du plan. P> Si une colonne contient peu de valeurs, un index non couvert est principalement inutile. P> Dans ce cas, je pense que la colonne ne peut contenir que "oui", "non" ou NUL. Donc, indexer cela n'améliorerait pas les performances. Et la meilleure réponse est celle du Keithl's. P> p> option
(recompilation) code> strong> p>
Y a-t-il une autre option en plus de Y n null?