我有一个使用交叉应用和复杂列的长连接。我有一个名为@NonCAT的参数。如果此参数等于" NonCAT"我希望我的第四个和第五个左连接加入另一个表。起初,我想也许有办法在那里放一个if语句。如:
if @NonCAT = 'NonCAT'
begin
left join (column1, column2, column3,
from a_completely_different_table
where reportmonth = @currentmonth
)
left join (column1...
from the_same_table_as_above
where reportmonth = @previousmonth
)
else if @NonCAT <> 'NonCat'
begin
left join (column1....
from_a_different_table_as_above....
我在这里有道理吗?任何帮助,将不胜感激。谢谢!
答案 0 :(得分:0)
您对单个查询的距离最近:
from a left join
b
on . . . and @NonCat = 'NonCat' left join
c
on . . . and @NonCat <> 'NonCat'
即,将条件移到on
子句中。您正在使用left join
,所以这很好。
当然,您可以编写整个查询两次并使用if
。或者,使用动态SQL构造单个查询。
答案 1 :(得分:0)
不同的方法可能不是使用条件连接,而是使用CASE WHEN ... THEN ... ELSE...END
(可以有多个WHEN
)选择的内容。)
SELECT CASE WHEN @NonCAT = 'NonCAT'
THEN t1.column1
ELSE t2.column1
END AS column1,
CASE WHEN @NonCAT = 'NonCAT'
THEN t1.column2
ELSE t2.column2
END AS column2,
CASE WHEN @NonCAT = 'NonCAT'
THEN t1.column3
ELSE t2.column3
END AS column3
FROM mainTable AS mt
LEFT OUTER JOIN (
SELECT column1, column2, column3,
FROM a_completely_different_table
WHERE reportmonth IN(@currentmonth, @previousmonth)
) AS t1 ON t1.somecol = mt.somecol
LEFT OUTER JOIN (
SELECT column1, column2, column3,
FROM from_yet_a_completely_different_table
WHERE [conditions]
) AS t2 ON t1.somecol = mt.somecol