2010-01-22 7 views
2

J'ai une requête SQL Server qui doit compter le nombre de lignes retournées, mais je dois ignorer les lignes où toutes les valeurs de colonne sont NULL. Certaines lignes ont des valeurs NULL pour certaines des colonnes, mais c'est OK. J'ai juste besoin de filtrer ceux qui ont toutes les valeurs NULL.requête sql ne tenant pas compte de toutes les lignes qui ont toutes les colonnes

En ce moment, je retourne toutes les lignes et en utilisant un SqlDataReader en itérant les lignes retournées et en comptant celles dont j'ai besoin. Je voudrais déplacer cela dans la requête elle-même si possible.

Merci!

EDIT: Ce que je suis en train de faire est semblable à cela, mais je suis apparemment avoir du mal à faire l'éditeur VS SQL reconnaître ce que je fais:

SELECT COUNT(sd.[ID]) 
FROM [Some Data] sd 
WHERE sd.[Data Name] = 'something' AND ((sd.q1 IS NOT NULL) OR (sd.q2 IS NOT NULL)) 

etc ..

+0

Votre code T-SQL ne sera pas exécuté. Vous ne spécifiez pas OR avec '||'. Mais, même ainsi, vous avez besoin d'un ET et non un OU. –

+0

oups, je le savais. De toute façon, je ne veux pas un ET. J'ai besoin des résultats pour suivre cette expression. Je ne sais tout simplement pas comment le dire en SQL. – Casey

Répondre

4
select count(id) 
from [Some Data] 
where not (Column1 is null and Column2 is null and Column3 is null ...) 
+0

Cela semble fonctionner! Merci. – Casey

1

que diriez-vous quelque chose comme ceci:

Sélectionnez Count (*) De MyTable Où Column1 IS NOT NULL et Colonne2 IS NOT NULL et Colonne3 IS NOT NULL ...

+0

Cela ne fonctionnera pas, car il y a des colonnes qui sont NULL et je veux les compter, mais pas celles qui ne sont * pas * toutes NULL. Voir ma récente édition comme un exemple. – Casey

1

Vous avez déjà sélectionné une réponse, mais c'est la plus correcte, elle devrait être la plus rapide car le moteur SQL peut l'optimiser et la "court-circuiter".

SELECT count(id) 
FROM [Some Data] 
WHERE NOT (COALESCE(Column1,Column2,Column3...) is null) 
+0

Je suis sûr que SQL Server est assez intelligent pour court-circuiter le code dans ma réponse aussi - mais le vôtre est plus succincte. Je voudrais y avoir pensé: P – Blorgbeard

+0

Je ne suis pas sûr, j'ai vu un certain nombre de cas où SQL évaluera tous les éléments et déclarations. C'est particulièrement pénible quand vous avez quelque chose comme 'isnumber (col) et cast (col comme int) = 1' – Hogan

Questions connexes