2011-11-01 42 views
0

原諒我的語言,SQL /報告措辭過濾由所有或選定的屬性

我使用Reporting Services在那裏我有2下拉列表,以便只有時期和類別顯示生成報表。我想要它,所以如果我選擇並顯示所有條目,並且從2個下拉列表中選擇了任何一個,然後按這些選擇進行篩選。我有一個存儲過程,它聲明以下WHERE子句:

WHERE (dbo.PERIOD_LIST.PERIOD_DESC = @period) OR (dbo.CATEGORY.CATEGORY_DESC = @category) 

但是我不能讓這個工作在Reporting Services/Visual Studio上。我顯示了所有條目而不是篩選條目。我將@period和@category初始化爲NULL。那麼我怎樣才能讓報表顯示所有的行,當兩個屬性都爲空,並且仍然能夠按每個或兩個進行過濾?

我該如何做到這一點?

編輯:我使用了FilipPopović給我的建議。如果您遇到此問題,請修改您的準備好的語句,並確保您刷新數據集中的字段,因爲準備好的語句中還有其他語句!

回答

0

注意,在SQL,NULL = NULL是永遠不會計算爲true。你可以把它看作NULL,它不是什麼,而是未指定的。你不能比較兩個未指定的值。如果列的值爲空值,則必須測試COL1 IS NULL以變爲true。

試試這個:

WHERE ((dbo.PERIOD_LIST.PERIOD_DESC = @period) OR (@period IS NULL)) 
AND ((dbo.CATEGORY.CATEGORY_DESC = @category) OR (@category IS NULL)) 
+0

程序的作品,但由於某種原因,它不會對RDL設計Visual Studio的顯示。 – Nimchip

+0

其實我修好了。非常感謝。 – Nimchip

+0

不客氣。請編輯你的問題,並寫下你如何解決,如果有一些問題沒有在這個線程中提到:) –

0

檢查參數NULL作爲條件的組成部分:

WHERE ((@period IS NULL) OR (dbo.PERIOD_LIST.PERIOD_DESC = @period)) 
    AND ((@category IS NULL) OR (dbo.CATEGORY.CATEGORY_DESC = @category))