На самом деле я проделал большую работу над этим и ударил по многим кирпичным стенам, но, в конце концов, нашел ответ - скорее хак - но это сработало очень хорошо и снизило накладные расходы на чтение моих запросов на 90% ... .
Таким образом, вместо того, чтобы дублировать коррелированный запрос много раз для получения нескольких столбцов из подзапроса, я просто использовал concat всех значений, которые я хочу вернуть в разделенный запятыми varchar, а затем снова развернул их в приложении ...
Так что вместо
select a,b,
(select x from bigcorrelatedsubquery) as x,
(select y from bigcorrelatedsubquery) as y,
(select z from bigcorrelatedsubquery) as z
from outertable
Я сейчас делаю
select a,b,
(select convert(varchar,x)+','+convert(varchar,x)+','+convert(varchar,x)+','
from bigcorrelatedsubquery) from bigcorrelatedquery) as xyz
from outertable
group by country
Теперь у меня есть все три коррелированных «скалярных» значения, которые мне нужны, но мне нужно было выполнить коррелированный подзапрос только один раз вместо трех раз.