Если таблицы имеют одинаковые столбцы, вы можете сделать UNION ALL
:
declare @Division int = 1
SELECT * FROM A WHERE @Division = 1
UNION ALL
SELECT * FROM B WHERE @Division = 2
-- etc
Или, если они не имеют точно такие же столбцы, но можно собрать все интересные столбцыот каждой, тогда может работать более расширенная версия:
SELECT COL1 as ID, COL2 as VALUE, COL3 as DESCR FROM A WHERE @Division = 1
UNION ALL
SELECT COL6 as ID, COL7 as VALUE, NULL as DESCR FROM B WHERE @Division = 2
-- etc
Я не уверен, однако, насколько эффективен все это будет, по сравнению с вашей первоначальной версией, которая использует IF
.
Вы также можете поместить все это в CTE для легкого объединения с другими таблицами:
;WITH DivisionCTE (ID, VALUE, DESCR) AS
(
SELECT COL1 as ID, COL2 as VALUE, COL3 as DESCR FROM A WHERE @Division = 1
UNION ALL
SELECT COL6 as ID, COL7 as VALUE, NULL as DESCR FROM B WHERE @Division = 2
-- etc
)
SELECT *
FROM DivisionCTE x
INNER JOIN OtherTable y ON x.ID = Y.ID
-- etc