SQL 基于参数的条件联合
SQL Conditional Union Based On Parameter
我有一个包含 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
我想将此查询与另一个查询合并,但前提是 StrParameter1 等于 "AAAA"。否则,我只希望触发查询的顶部。在其他 30 种情况下我不需要工会,但只有 1 种情况需要工会。
Query 1
If StrParameter1 = 'AAAA' Then
UNION
QUERY 2
您可以使用以下模式来完成您要查找的内容
declare @param varchar(4) = 'AAAA'
select *
from MyTable
union
select *
from MyOtherTable
where @param = 'AAAA'
在这种情况下,如果@param 是'AAAA',联合会就位,如果不是,第二个查询将不会return任何结果。
这样您就不需要更改查询。
我有一个包含 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
我想将此查询与另一个查询合并,但前提是 StrParameter1 等于 "AAAA"。否则,我只希望触发查询的顶部。在其他 30 种情况下我不需要工会,但只有 1 种情况需要工会。
Query 1
If StrParameter1 = 'AAAA' Then
UNION
QUERY 2
您可以使用以下模式来完成您要查找的内容
declare @param varchar(4) = 'AAAA'
select *
from MyTable
union
select *
from MyOtherTable
where @param = 'AAAA'
在这种情况下,如果@param 是'AAAA',联合会就位,如果不是,第二个查询将不会return任何结果。
这样您就不需要更改查询。