8
votes

TSQL - ISNULL sur plusieurs colonnes

J'ai une requête SQL simple (SQL Server 2005) où je sélectionne à partir d'une table contenant plusieurs colonnes qui ont des valeurs de bit. Ces colonnes sont nulllables, donc peut contenir NULL, 0 ou 1.

Il existe un nombre juste de ces colonnes et dans ma requête, je souhaite retourner zéro si la valeur est null. J'utilise actuellement Isnull comme si: xxx

Comme je l'ai mentionné, il y a beaucoup de ces colonnes de bits (beaucoup plus que dans l'exemple simple ci-dessus). Existe-t-il une façon d'utiliser Isnull sur plusieurs colonnes comme ceci: xxx

La requête ci-dessus ne fonctionne pas mais vous obtenez ce que j'essaie de faire - donc je peux Évitez d'avoir à écrire une instruction ISNULL pour chaque colonne,

Merci.


2 commentaires

Avez-vous besoin que les colonnes soient nullables?


Oui, je ne suis pas capable de modifier la table de quelque manière que ce soit


6 Réponses :


3
votes

Je ne pense pas. Mais une option peut être de créer une vue sur cette table et de mettre toutes les déclarations isnull dans la vue. Au moins, vous n'aurez pas à le faire à chaque fois

par exemple. xxx


0 commentaires

2
votes

Malheureusement, la réponse simple est non .

Vous pouvez écrire de manière dynamique SQL, mais tout ce qui se passe, le SQL final résultant devrait être isnull (A, 0), ISNULL (B, 0), ISNULL (C, 0), ISnull (D, 0 ), etc


0 commentaires

12
votes

Essayez ceci:

SELECT ISNULL(COALESCE(LikesOranges, LikesApples, LikesPears),0) AS MyBit FROM FoodPreferences


3 commentaires

Ce n'est pas ce qui a demandé. La question était d'obtenir toutes les données de colonne en tant que paramètre ISnull.


Oui, mais c'est juste un pas. Laissez-les cuire le repas enfin. :)


Je pense qu'il veut dire qu'il possède de nombreuses colonnes nullables et veulent être une colonne ISNULL sur EAHC séparément (pas une regroupement multicolonne) sans avoir à saisir tous les nom de colonne.



1
votes

Je pense que vous pouvez écrire un programme simple et générer une clause sélectionnée en lisant toutes les colonnes et en générant le SELECT


0 commentaires

7
votes

afin que je puisse éviter d'écrire un Déclaration isnull pour chaque colonne,

Exécutez cette requête et copiez le résultat à votre instruction SELECT. system_type_id = 104 filtre le résultat sur bit colonnes. xxx

résultat: xxx < / Pré>


1 commentaires

C'est une solution de contournement fantastique sur le problème - c'est ce genre de pensée créative qui fait une telle ressource précieuse. Merci.



-1
votes

1 commentaires

Comme mentionné dans les réponses précédentes, la coalesce retournera la première valeur non nulle qui n'est pas la question de la question.