2014-08-28 30 views
1

我在嘗試運行SQL查詢,該查詢將篩選參數中傳遞的值,或者如果參數中的值爲「未指定」,則應返回所有值。基於指定值或未指定的條件篩選

的參數是@station其可以包含的值'Unspecified', 'Station1', 'Station2', 'Station3'

如果參數@station等於Station1例如,我想將返回的數據被過濾以僅'Station1',然而如果參數@station等於到'Unspecified',那麼返回的數據應包括station1, station2和所有站點的值。

我使用其他過濾器,因爲這查詢的一部分,這裏是我下面的代碼,它是不工作的最後一行:

where tblRTC.CODE IN ('C1', 'C2', 'C3') 
and CAST(tblDET.START_DATE AS Date) >= CAST (@start_date AS Date) 
and CAST(tblDET.END_DATE AS Date) <= CAST (@end_date AS Date) 
and IIF(@station = 'Unspecified',tblSTACON.DESCRIPTION <>@station,tblSTACON.DESCRIPTION = @station) 

我在第三方應用程序寫這和有不能控制傳遞的參數。

任何幫助將不勝感激。

+0

您的語句失敗的原因是'IIF'不是SQL函數。 – SchmitzIT 2014-08-28 10:06:27

+1

@SchmitzIT你是什麼意思? http://msdn.microsoft.com/en-us/library/hh213574.aspx – gotqn 2014-08-28 10:07:09

+0

@gotqn哇。我從來不知道,哈哈。認爲它只是MS Access。 – SchmitzIT 2014-08-28 10:31:58

回答

0
where tblRTC.CODE IN ('C1', 'C2', 'C3') 
and CAST(tblDET.START_DATE AS Date) >= CAST (@start_date AS Date) 
and CAST(tblDET.END_DATE AS Date) <= CAST (@end_date AS Date) 
and tblSTACON.DESCRIPTION = (case when @station not in('Unspecified') then @station else tblSTACON.DESCRIPTION end) 
+0

我用上面的代碼,它的工作完美。謝謝! – BHodgson 2014-08-28 10:43:29

2

希望這有助於

where tblRTC.CODE IN ('C1', 'C2', 'C3') 
and CAST(tblDET.START_DATE AS Date) >= CAST (@start_date AS Date) 
and CAST(tblDET.END_DATE AS Date) <= CAST (@end_date AS Date) 
and tblSTACON.DESCRIPTION = (case when @station <> 'Unspecified' then @station else tblSTACON.DESCRIPTION end) 
+0

做得很好。你只是打敗了我:) – SchmitzIT 2014-08-28 10:06:09

0

你可以試試這個:

where tblRTC.CODE IN ('C1', 'C2', 'C3') 
and CAST(tblDET.START_DATE AS Date) >= CAST (@start_date AS Date) 
and CAST(tblDET.END_DATE AS Date) <= CAST (@end_date AS Date) 
and 
(
    @station = 'Unspecified' 
    OR 
    tblSTACON.DESCRIPTION = @station 
) 

如果@station = 'Unspecified'將返回所有的記錄,如果它有不同的價值就會被它過濾。