基于参数的 SQL 条件并集

Com*_*Fly 0 sql sql-server union conditional-statements

我有一个查询,它接受 3 个参数,StrParameter1这是我想要完成的任务的关键。

SELECT  ai.strName,
ai.strId,
ai.lngBKey,
ci.strFormattedId,
ci.lngAKey,
ts.dtmPeriod,
ts.strT2Type,
ts.strImpact,
ts.curAmount,
ts.curBalance 

FROM    TBlCInfo ci,
tblAInfo ai,
tblTStage ts 

WHERE   ci.lngAKey    =  ai.lngAKey 
AND     ai.lngBKey    =  ts.lngBKey 
AND     ts.lngVersion    =  0 
AND     ts.blnReversed   =  0 
AND     ai.strType   =   @StrParameter1
AND     ts.dtmPeriod  >= @DtmParameter2
AND     ts.dtmPeriod  <= @DtmParameter3
Run Code Online (Sandbox Code Playgroud)

我想将此查询与另一个查询合并,但前提是 StrParameter1 等于“AAAA”。否则,我只想触发查询的顶部部分。还有大约 30 种其他情况我不需要工会,但只有 1 种情况需要工会。

Query 1

If StrParameter1 = 'AAAA' Then
    UNION
          QUERY 2
Run Code Online (Sandbox Code Playgroud)

FLI*_*KER 5

您可以使用下面的模式来完成您想要的操作

declare @param varchar(4) = 'AAAA'

select *
from MyTable
union
select *
from MyOtherTable
where @param = 'AAAA'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果 @param 是“AAAA”,则联合将到位,如果不是,第二个查询将不会返回任何结果。

这样你就不需要改变你的查询。