2012-11-20 148 views
0

我正在構建SSRS中的其中一個報告,其中參數值可以爲NULL或可以包含NON-NULL值。何時條件Where Where子句

現在,如果由用戶選擇的值是NULL(從下拉列表),則SQL查詢將是

field-Name IS NULL 

如果由用戶選擇的值是除NULL什麼,SQL查詢將是

field-Name IN (@parameter-values) 

我需要把這個條件放在WHERE子句中使用Case-When,以便無論用戶給出什麼輸入,都由SQL Query處理,並返回適當的結果。用戶可能會從下拉列表中選擇NULL和非NULL值。

請指導,以如何把在WHERE子句或是否有任何其他的解決方案存在

更新的「案例」條件:

WHERE @IR_Project_Type = 
    (
     CASE WHEN ([IR Project Type] = NULL) THEN ([IR Project Type] IS NULL) 
     END 
    ) 

//將「爲空」的條件拋出錯誤。

+1

向我們展示你到目前爲止! –

+0

@marc_s:問題已更新 –

+0

SQL Server中的情況旨在返回單個原子值 - 不是代碼塊。不完全確定你想在這裏做什麼... –

回答

0

你可以使用厚臉皮OR嗎?

WHERE (Field-Name IS NULL OR Field-Name = @parameter) 
+0

我的第一次嘗試是使用你的建議。但是,在報告中僅選擇非空值時,這不會過濾掉NULL值。此外,它將是字段名稱(@參數):-) –

1

你是否承認空字符串作爲field-Name中的值?如果不是:

declare @val varchar(20) = null 

select * 
from something 
where 
    ISNULL(@val,'') = ISNULL(fieldName,''); 


declare @val varchar(20) = 'aaa' 

select * 
from something 
where 
    ISNULL(@val,'') = ISNULL(fieldName,''); 

SQLFiddle

編輯: 或剛:

declare @val varchar(20) = 'aaa' 

select * 
from something 
where 
    (case when @val is null 
    then 
     (case when fieldName is null then 1 else 0 end) 
    else 
     (case when fieldName = @val then 1 else 0 end) end) = 1 

SQLFiddle

請測量值我的查詢。

WHERE (case when @IR_Project_Type is null 
     then 
      (case when [IR Project Type] is null then 1 else 0 end) 
     else 
      (case when [IR Project Type] = @IR_Project_Type then 1 else 0 end) end) = 1 
+0

不知道你的代碼試圖做什麼。我將你的代碼添加到我的查詢中,並且在選擇非空值時它不顯示所需的輸出。它顯示0個結果。它適用於NULL值。 –

+0

你還在用'IN'嗎?爲什麼你使用它,如果你正在使用一個變量? – fnurglewitz

+0

Nah!我沒有使用'IN',也沒有使用變量 –

1
WHERE ((@IR_Project_Type IS NULL AND [IR Project Type] IS NULL) OR [IR Project Type] = @IR_Project_Type) 
+0

感謝您的輸入,但這不起作用對於非空值 –

+0

它是應該的。你得到的錯誤是什麼? –

+0

當我運行報告時,由於SQL查詢無法接受來自下拉列表的多個值,報告會引發錯誤 –

0

試試這個:

WHERE [IR_Project_Type] = 
    (
     CASE WHEN Isnull(@IR_Project_Type, '') = '' THEN NULL ELSE @IR_Project_Type 
     END 
    ) 
+0

謝謝。讓我試試這個 –

+0

當我運行報告時,報告會引發錯誤,因爲SQL查詢無法接受來自下拉列表的多個值 –

0

這是困難的(如果它甚至有可能)爲SSRS多值參數包括null值。

我給這通常的解決方法是使用標準的替換字符串作爲NULL的替代品,如"<No Value>"

然後您的SQL查詢可以

WHERE 
    [IR_Project_Type] in (@IR_Project_Type) 
    OR (
    '<No Value>' in (@IR_Project_Type) 
    AND [IR_Project_Type] is NULL 
    ) 

寫成這樣可以節省很多痛苦試圖處理真正的NULL s。