2017-02-06 40 views
-2

假設我有如下表:由多列搜索在SQL Server

enter image description here

我的期望是:

  1. 如果我搜索什麼,它將返回表中的所有行。

  2. 如果我搜索--- 'SR' 'M', 'AP', '空' ---它將只返回第一行

  3. 如果我搜索--- '空', 'm','ap','null'---它將只返回前兩行

  4. 如果我搜索---'null','m','null','null' - - 它會返回僅排前三

  5. 如果我搜索---「空」,「M」,「TN」,「空」 ---它將返回只有第三排

任何幫助,請

+3

請向我們展示您迄今爲止編寫的代碼。 – DeanOC

回答

0

說你輸入的變量p_name,p_city和p_state,您可以使用情況進行條件篩選

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; 

要同時處理空的變量,你可以使用:

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

請再次看到我的期望..我有些修改.. – TanvirArjel

1

嘗試以下查詢:

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)