¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Optimización de consultas SQL con subconsultas y filtros dinámicos: Guía paso a paso

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 24 Vistas
0
Cargando...

Estimados expertos, tengo la siguiente consulta donde estoy usando una subconsulta en la cláusula WHERE.

select DISTINCT "FIELD1" , "FIELD2".........

from "_SYS_BIC"."system-local.bw.bw2hana/AA2"

where (case (select LOW from "SAPSR3"."AA1" where FIELD_NAME = 'EXTERNAL' )

WHEN 'ACT' then "0FISCPER"

WHEN 'BUD' then "0PLANYEAR"

WHEN 'FC' then "0FISCYEAR" end = time_slice ) * time_slice is derived previously based ACT, BUD, FC

and ("0VERSION" = '000') and "0VTYPE" = '010'

Aquí, select DISTINCT "FIELD1" se deriva sin considerar la opción de filtro CASE, sino que solo considera VERSION y VTYPE.

Luego, el conjunto de datos devuelto se une con el resultado de la condición CASE para proporcionar la salida final, lo que resulta en un volcado de memoria debido al gran volumen de datos.

El requisito es reutilizar el mismo código para diferentes filtros para diferentes tipos (0FISCPER para ACT, 0PLANYEAR para BUD y 0FISYEAR para FC). Intenté usar las siguientes sugerencias pero sin suerte:

1. NO_CALC_VIEW_UNFOLDING 2. NO_USE_ESX_SEARCH 3. CS_FILTER 4. NO_OLAP_PLAN 5. NO_CS_JOIN

Lo mismo está sucediendo cuando uso select * from una función de tabla. La unión se realiza después de la ejecución de la consulta, excluyendo las restricciones devueltas de la función de tabla.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

2 Respuestas

0
Cargando...

Hola,

¿Esto funciona?

select distinct aa2~field1, ....
from aa2
inner join aa1
on field_name = 'EXTERNAL'
where "0VERSION = '000'
  and "0VTYPE" = '010
   and (   ( aa1~low = 'ACT' and 0FISCPER = time_slice )
       or  ( aa1~low = 'BUD' and 0PLANYEAR = time_slice )
       or  ( aa1~low = 'FC' and 0FISCYEAR= time_slice )
   )


Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¿Intentaste poner un ELSE en tu declaración CASE?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?