Realmente trabajé mucho en esto, y golpeé muchas paredes de ladrillo, pero finalmente descubrí una respuesta, más bien un truco, pero funcionó muy bien y reduje la carga de lectura de mis consultas en un 90%. ..
Así que en lugar de duplicar la consulta correlacionada muchas veces para recuperar varias columnas de la subconsulta, acabo de utilizar concat todos los valores que quiero devolver en una varma separada por comas, y luego desenrollérselos nuevamente en la aplicación ... .
Así que en lugar de
select a,b,
(select x from bigcorrelatedsubquery) as x,
(select y from bigcorrelatedsubquery) as y,
(select z from bigcorrelatedsubquery) as z
from outertable
hago ahora
select a,b,
(select convert(varchar,x)+','+convert(varchar,x)+','+convert(varchar,x)+','
from bigcorrelatedsubquery) from bigcorrelatedquery) as xyz
from outertable
group by country
ahora tengo los tres valores correlacionados '' escalares que necesitaba pero sólo tuvimos que ejecutar la consulta correlacionada vez en lugar de tres veces.
Depende de los detalles, como columnas y tablas involucradas. –
@OMG Ponis: ¿Me gusta? ¿No hay una manera general para tal? – Wernight
Estoy de acuerdo con @OMG. Dicho esto, si puede escribir * una * subconsulta que devuelva tanto 'turnover' como' cost' como columnas, la consulta envuelta alrededor de esa subconsulta puede realizar 'turnover-cost'. Para obtener más detalles, necesitaremos algunos detalles sobre su esquema. –