2017-02-06 1 views
-2

Supposons que je le tableau suivant:Recherche par plusieurs colonnes dans SQL Server

enter image description here

Mon attente est:

  1. Si je recherche rien ne renverra toutes les lignes de la table .

  2. Si je recherche --- 'sr' 'm', 'ap', 'null' --- il ne retourneront que dans la première rangée

  3. Si je recherche --- 'null', 'm', 'ap', 'null' --- il ne retournera que les deux premières lignes

  4. Si je recherche --- 'null', 'm', 'null', 'null' - -cela ne reviendra que les trois premières lignes

  5. Si je recherche --- « null », « m », « tn », « null » --- il ne renverra que la troisième ligne

Toute aide s'il vous plaît

+3

S'il vous plaît nous montrer le code que vous avez écrit pour le moment. – DeanOC

Répondre

0

Dites vos entrées sont des variables p_name, p_city et p_state, vous pouvez utiliser le cas faire un filtrage conditionnel

Select * 
From t 
Where 
Name = case when @p_name = '' then name else @p_name end 
And city = case when @p_city = '' then city else @p_city end 
And state = case when @p_state = '' then name else @p_state end; 

Pour gérer les valeurs NULL également dans les variables, vous pouvez utiliser:

Nullif(@var, '') is null 
+0

S'il vous plaît voir mes attentes à nouveau .. J'ai un peu modifié .. – TanvirArjel

1

Essayez la requête suivante:

DECLARE @name VARCHAR(100) = 'Sree', 
     @city VARCHAR(100), 
     @state VARCHAR(100) 

;WITH test_table([name], city, state, country) AS 
(
    SELECT 'Sree','mm','ap','ind' UNION ALL 
    SELECT 'xxx','mm','ap','ind' UNION ALL 
    SELECT 'abcd','mm','tn','ind' UNION ALL 
    SELECT 'wer','dd','ap','ind' 
) 
SELECT * 
FROM test_table AS t 
WHERE t.name = ISNULL(NULLIF(@name, ''), t.name) 
    AND t.city = ISNULL(NULLIF(@city, ''), t.city) 
    AND t.state = ISNULL(NULLIF(@state, ''), t.state)