2011-09-18 3 views
3

Comment puis-je supprimer des cellules NULL dans ma requête, car certains enregistrements apparaissent même si le CompanyName n'existe pas?Comment supprimer des colonnes ayant des valeurs NULL?

SELECT ClientID, CompanyName, FirstName, LastName, Street, City 
    FROM Client 
    WHERE CompanyName LIKE '%G%' Or FirstName LIKE '%J%' OR LastName LIKE '%J%' 
    OR Street LIKE '%J%' OR City LIKE '%J%' Or ContactNo LIKE '%0%' 
    AND ClientTypeID = 2 
+0

Voulez-vous des exclure toutes les lignes où 'CompanyName' est nulle? – Mat

+0

OUI! Parce que certains enregistrements n'ont pas de nom de société – TheOxblood

Répondre

6

Pour exclure toutes les lignes où CompanyName est nul, vous devez ajouter

AND CompanyName is NOT NULL 

vous pourriez avoir besoin entre parenthèses après votre WHERE et après votre dernière OR état

+0

Merci beaucoup! :) J'utilise cette commande sur ma zone de texte Recherche de texte – TheOxblood

+0

+1 pour le rappel qu'il doit y avoir une parenthèse. ET précède OR, donc ils devraient certainement être entourés de parenthèses (si ce n'est pas simplement pour la facilité de lecture). –

1

Naïvement, il suffit d'utiliser

SELECT ClientID, CompanyName, FirstName, LastName, Street, City 
FROM Client 
WHERE CompanyName is not NULL and (CompanyName LIKE '%G%' Or FirstName LIKE '%J%' Or LastName LIKE '%J%' Or Street LIKE '%J%' Or City LIKE '%J%' Or ContactNo LIKE '%0%' 
AND ClientTypeID = 2) 
+0

Merci beaucoup! :) J'utilise cette commande sur mon TextBox de recherche de clients – TheOxblood

0

CompanyName like '%G'

échouera si CompanyName est null, n'est-ce pas?

Si votre DB ne se comporte pas de cette façon, il suffit d'ajouter

AND CompanyName IS NOT NULL

+0

Merci beaucoup! :) J'utilise cette commande sur mon TextBox de Recherche de Client – TheOxblood

0
SELECT ClientID, CompanyName, FirstName, LastName, Street, City 
FROM Client 
WHERE (CompanyName LIKE '%G%' Or FirstName LIKE '%J%' Or LastName LIKE '%J%' Or Street LIKE '%J%' Or City LIKE '%J%' Or ContactNo LIKE '%0%' AND ClientTypeID = 2) AND CompanyName IS NOT NULL; 

Le problème est que vous avez ou des déclarations. Même si CompanyName ne correspond pas à la ligne, LastName peut convenir. Puisque vous utilisez ou est dans votre résultat de filtre sera alors inclus.

Et vous mélangez ou est, et les deux sans aucune parenthèse. Tu ne devrais pas faire ça. Vous devriez écrire huitard:

SELECT ClientID, CompanyName, FirstName, LastName, Street, City 
FROM Client 
WHERE (CompanyName LIKE '%G%' Or FirstName LIKE '%J%' Or LastName LIKE '%J%' Or Street LIKE '%J%' Or City LIKE '%J%' Or ContactNo LIKE '%0%') AND ClientTypeID = 2; 

ou

SELECT ClientID, CompanyName, FirstName, LastName, Street, City 
FROM Client 
WHERE CompanyName LIKE '%G%' Or FirstName LIKE '%J%' Or LastName LIKE '%J%' Or Street LIKE '%J%' Or City LIKE '%J%' Or (ContactNo LIKE '%0%' AND ClientTypeID = 2); 
0

Retirez toutes les colonnes de toutes les valeurs nulles

declare @ex as nvarchar(max) = '' 
declare @_null as nvarchar(max) 
set @_null = '' 

select @_null += 'isnull(' + QUOTENAME(column_name) + ',0) as ' + QUOTENAME(column_name) + ',' 

from sample.INFORMATION_SCHEMA.columns where TABLE_NAME = 'table'; 

set @_null = left(@_null,len(@_null) - 1); 

set @ex = 'select ' + @_null + ' from table'; 

exec sp_executesql @ex; 
Questions connexes