Sql 基于指定值或未指定值的条件筛选

Sql 基于指定值或未指定值的条件筛选,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试运行一个SQL查询,该查询将筛选参数中传递的值,或者如果参数中的值为“未指定”,则应返回所有值 参数为@station,其中可能包含值“未指定”、“Station1”、“Station2”、“Station3”等 例如,如果参数@station等于Station1,我希望返回的数据只过滤到'Station1',但是如果参数@station等于'Unspecified',则返回的数据应包括Station1的值,站点2和所有站点 我正在使用其他筛选器作为此查询的一部分,下面是我的代码,这是

我正在尝试运行一个SQL查询,该查询将筛选参数中传递的值,或者如果参数中的值为“未指定”,则应返回所有值

参数为
@station
,其中可能包含值
“未指定”、“Station1”、“Station2”、“Station3”等

例如,如果参数
@station
等于
Station1
,我希望返回的数据只过滤到
'Station1'
,但是如果参数
@station
等于
'Unspecified'
,则返回的数据应包括
Station1的值,站点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 IIF(@station = 'Unspecified',tblSTACON.DESCRIPTION <>@station,tblSTACON.DESCRIPTION = @station)
其中tblRTC.code位于('C1'、'C2'、'C3'中)
and CAST(tblDET.START_DATE AS DATE)>=CAST(@START_DATE AS DATE)
和CAST(tblDET.END_DATE AS DATE)希望这有帮助

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)
其中tblRTC.code位于('C1'、'C2'、'C3'中)
and CAST(tblDET.START_DATE AS DATE)>=CAST(@START_DATE AS DATE)
和铸造(tblDET.END_DATE AS DATE)
其中tblRTC.code位于('C1','C2','C3'))
and CAST(tblDET.START_DATE AS DATE)>=CAST(@START_DATE AS DATE)
和CAST(tblDET.END_DATE AS DATE)您可以尝试以下方法:

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
)
其中tblRTC.code位于('C1'、'C2'、'C3'中)
and CAST(tblDET.START_DATE AS DATE)>=CAST(@START_DATE AS DATE)

和CAST(tblDET.END_DATE AS DATE)语句失败的原因是
IIF
不是SQL函数。@SchmitzIT你是什么意思@哇。我从来不知道,哈哈。我还以为这只是MS Access呢。@SchmitzIT注意到,SQL Server 2012+@gotqn中提供了它,这就解释了这一点。我必须承认,这些年来,我对T-SQL的所有变化都不是很了解(尽管我应该了解)。谢谢你教育我:)总是很高兴了解更多。我使用了上面的代码,它工作得非常好。谢谢
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
)