Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

consulta BBDD Oracle

Estas en el tema de consulta BBDD Oracle en el foro de Bases de Datos General en Foros del Web. Saludos, tengo el siguiente problema En una consulta SQL quiero hacer una subconsulta, pero que esta subconsulta utilice los filtros de la "consulta principal". Veamos ...
  #1 (permalink)  
Antiguo 13/09/2010, 09:43
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 9 meses
Puntos: 5
consulta BBDD Oracle

Saludos, tengo el siguiente problema

En una consulta SQL quiero hacer una subconsulta, pero que esta subconsulta utilice los filtros de la "consulta principal". Veamos la SQL

Código PHP:
SELECT USR.NOMUSR||' '||USR.AP1USR||' '|| USR.AP2USR|| ' ('|| USR.CODUSR||')' NOMUSR,
       
OFI.NOMOFI || ' ('|| OFI.CODOFI||')' OFICINA
       
EMP.NOMEMP || ' ('|| OFI.IDEEMP||')' EMPRESA
       
SUB.NOMSUB
       
ZON.NOMZON,
       
INCEXP.NUMEXP,
       
INCEXP.TOTINC,
       
TRUNC(TIMCREFECCRE,
       (
SELECT SUM(TOTINCRHHFROM INCENTIVOS_USUARIOS INCUSRTOT 
               WHERE INCUSR
.CODUSRINC=INCUSRTOT.CODUSRINC                
               GROUP BY INCUSRTOT
.CODUSRINCTOTINCRHH                      
FROM  INCENTIVOS_USUARIOS INCUSR
,
      
INCENTIVOS_EXPEDIENTES INCEXP,
      
USUARIOS USR,
      
OFICINAS OFI,
      
EMPRESAS EMP
      
SUBZONAS SUB
      
ZONAS  ZON,
      
FRANQUICIAS FRQ                 
WHERE   INCUSR
.CODUSRINC INCEXP.CODUSR
AND     INCUSR.IDEICP INCEXP.IDEICP
AND     INCEXP.CODUSR USR.CODUSR
AND     INCEXP.CODOFI OFI.CODOFI    
AND     OFI.IDEEMP    EMP.IDEEMP
AND     OFI.CODSUB    SUB.CODSUB
AND     SUB.CODZON    ZON.CODZON
AND     OFI.IDEFRQ    FRQ.IDEFRQ(+)
and     
INCUSR.IDEICP=205 

Bien, quiero que la tabla con el alias INCUSRTOT aplique los mismos filtros que se aplican en la tabla principal -concretamente los mismo que los de la tabla con alias INCUSR- En ese caso por ejemplo, para un IDEICP=205 me filtra todos los resultados, menos para el campo TOTINCRHH que siempre me devuelve el total -le indique o no un IDEICP- ¿alguna ayuda?
  #2 (permalink)  
Antiguo 13/09/2010, 10:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: consulta BBDD Oracle

Me perdí.

haber si entendí un poco.
Quieres utilizar TOTINCRHH en el WHERE para compararlo con otro valor tal cual haces con INCUSR.IDEICP?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 13/09/2010, 12:26
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 19 años, 9 meses
Puntos: 5
Respuesta: consulta BBDD Oracle

Cita:
Iniciado por huesos52 Ver Mensaje
Me perdí.

haber si entendí un poco.
Quieres utilizar TOTINCRHH en el WHERE para compararlo con otro valor tal cual haces con INCUSR.IDEICP?

Vayamos por partes. Tengo la siguiente subconsulta:

Código PHP:
       (SELECT SUM(TOTINCRHHFROM INCENTIVOS_USUARIOS INCUSRTOT 
               WHERE INCUSR
.CODUSRINC=INCUSRTOT.CODUSRINC                
               GROUP BY INCUSRTOT
.CODUSRINCTOTINCRHH 
Esta subconsulta devuelve siempre el mismo valor haya los filtros que haya en la cláusula where de la consulta principal.

Código PHP:
FROM  INCENTIVOS_USUARIOS INCUSR,
      
INCENTIVOS_EXPEDIENTES INCEXP,
      
USUARIOS USR,
      
OFICINAS OFI,
      
EMPRESAS EMP
      
SUBZONAS SUB
      
ZONAS  ZON,
      
FRANQUICIAS FRQ                 
WHERE   INCUSR
.CODUSRINC INCEXP.CODUSR
AND     INCUSR.IDEICP INCEXP.IDEICP
AND     INCEXP.CODUSR USR.CODUSR
AND     INCEXP.CODOFI OFI.CODOFI    
AND     OFI.IDEEMP    EMP.IDEEMP
AND     OFI.CODSUB    SUB.CODSUB
AND     SUB.CODZON    ZON.CODZON
AND     OFI.IDEFRQ    FRQ.IDEFRQ(+)
and     
INCUSR.IDEICP=205 

Se puede observar que como última condición le indico
Código PHP:
and     INCUSR.IDEICP=205 
Bien, pues la subconsulta -le indique o no la condición mencionada una línea antes- me devuelve el mismo valor. Me interesaría que ese filtro también lo aplicara en la subconsulta, todo eso sin la necesidad te tener que especificar de nuevo el filtro en la subconsulta (En realidad tengo que añadir varios)

¿Existe alguna manera?
  #4 (permalink)  
Antiguo 13/09/2010, 12:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: consulta BBDD Oracle

Prueba esta:

Código SQL:
Ver original
  1. SELECT
  2. NOMUSR,
  3. OFICINA,
  4. EMPRESA,
  5. NOMSUB,
  6. NOMZON,
  7. NUMEXP,
  8. TOTINC,
  9. FECCRE,
  10. (SELECT
  11.  SUM(TOTINCRHH)
  12.  FROM INCENTIVOS_USUARIOS INCUSRTOT
  13.  WHERE INCUSRTOT.CODUSRINC = CODUSRINC                
  14.  GROUP BY INCUSRTOT.CODUSRINC
  15. ) TOTINCRHH  
  16. FROM
  17. (
  18.  SELECT USR.NOMUSR||' '||USR.AP1USR||' '|| USR.AP2USR|| ' ('|| USR.CODUSR||')' NOMUSR,
  19.        OFI.NOMOFI || ' ('|| OFI.CODOFI||')' OFICINA,
  20.        EMP.NOMEMP || ' ('|| OFI.IDEEMP||')' EMPRESA,
  21.        SUB.NOMSUB NOMSUB,
  22.        ZON.NOMZON NOMZON,
  23.        INCEXP.NUMEXP NUMEXP,
  24.        INCEXP.TOTINC TOTINC,
  25.        TRUNC(TIMCRE) FECCRE,
  26.        INCUSR.CODUSRINC CODUSRINC                      
  27.  FROM  INCENTIVOS_USUARIOS INCUSR,
  28.       INCENTIVOS_EXPEDIENTES INCEXP,
  29.       USUARIOS USR,
  30.       OFICINAS OFI,
  31.       EMPRESAS EMP,
  32.       SUBZONAS SUB,
  33.       ZONAS  ZON,
  34.       FRANQUICIAS FRQ                
  35.  WHERE   INCUSR.CODUSRINC = INCEXP.CODUSR
  36.  AND     INCUSR.IDEICP = INCEXP.IDEICP
  37.  AND     INCEXP.CODUSR = USR.CODUSR
  38.  AND     INCEXP.CODOFI = OFI.CODOFI    
  39.  AND     OFI.IDEEMP    = EMP.IDEEMP
  40.  AND     OFI.CODSUB    = SUB.CODSUB
  41.  AND     SUB.CODZON    = ZON.CODZON
  42.  AND     OFI.IDEFRQ    = FRQ.IDEFRQ(+)
  43.  AND     INCUSR.IDEICP=205  
  44. );

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: bbdd, oracle
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:08.