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

Oracle Join Group by

Estas en el tema de Oracle Join Group by en el foro de Oracle en Foros del Web. Hola foreros, Soy nuevo en Oracle, y estoy trabajando en un problema que en Sql lo solucionaría con un Update con join. En Oracle la ...
  #1 (permalink)  
Antiguo 20/05/2011, 14:24
 
Fecha de Ingreso: enero-2006
Mensajes: 293
Antigüedad: 12 años, 8 meses
Puntos: 4
Oracle Join Group by

Hola foreros,

Soy nuevo en Oracle, y estoy trabajando en un problema que en Sql lo solucionaría con un Update con join. En Oracle la sintaxis es diferente:

Código:
UPDATE (
      SELECT campo1, campo2
      FROM tabla1 join tabla2 on tabla1.x = tabla2.y        
)
SET campo1=campo2;
Esto me funciona bien, pero ahora estoy en el problema que necesito agrupar los resultados:


Inicializando el ejemplo: 3 tablas con registros
Código:
drop table table1 /
drop table table2 /
DROP TABLE TABLE3 /

create table table1
(
numero number,
cantidad number
)/
insert into table1 values(1,10);
insert into table1 values(1,20);
insert into table1 values(1,30);
insert into table1 values(2,40);
insert into table1 values(2,50);
insert into table1 values(2,60);
insert into table1 values(3,70);
insert into table1 values(3,80);
insert into table1 values(3,90);
/

create table table2
(
  numero number,
  cantidad number
)/
insert into table2 values(1,10);
insert into table2 values(1,20);
insert into table2 values(2,40);
insert into table2 values(2,50);
insert into table2 values(3,70);
insert into table2 values(3,80);
/

CREATE TABLE TABLE3(
  NUMERO1 NUMBER,
  CANTIDAD1 NUMBER,
  NUMERO2 NUMBER,
  CANTIDAD2 NUMBER
)/
Ahora, de tabla 1 agrupo por NUMERO y agrego los valores a la tabla 3
Código:
INSERT INTO TABLE3(NUMERO1,CANTIDAD1)
SELECT NUMERO,SUM(CANTIDAD)
FROM TABLE1
GROUP BY NUMERO;

/*
NUMERO1                CANTIDAD1              NUMERO2                CANTIDAD2              
---------------------- ---------------------- ---------------------- ---------------------- 
1                      60                                                                
2                      150                                                               
3                      240                                            
*/
Ahora, quiero actualizar TABLE3.NUMERO2 y TABLE3.CANTIDAD2 con los valores de TABLE2

Código:
UPDATE /*+BYPASS_UJVC*/(
    SELECT  TRES.NUMERO2, TRES.CANTIDAD2,
                  DOS.NUMERO, DOS.CANTIDAD 
     FROM TABLE3 TRES
             JOIN TABLE2 DOS ON TRES.NUMERO1 = DOS.NUMERO 
)
SET NUMERO2=NUMERO,    CANTIDAD2 = CANTIDAD;
/*
NUMERO1                CANTIDAD1              NUMERO2                CANTIDAD2              
---------------------- ---------------------- ---------------------- ---------------------- 
1                      60                     1                      20                     
2                      150                    2                      50                     
3                      240                    3                      80
*/
En la columna cantidad solo me guarda el último valor correspondiente al numero (20, 50, 80). Entonces lo que yo necesito es que me sume las cantidades de la tabla2:

Intente usar un group by pero me marca error
Código:
UPDATE /*+BYPASS_UJVC*/(
      SELECT   tres.numero2,  TRES.CANTIDAD2,
                     DOS.NUMERO,  sum(DOS.CANTIDAD ) cantidad
      FROM TABLE3 TRES
                JOIN TABLE2 DOS ON TRES.NUMERO1 = DOS.NUMERO 
      group by tres.numero2, TRES.CANTIDAD2, DOS.NUMERO 
)
SET NUMERO2=NUMERO,    CANTIDAD2 = CANTIDAD;
Error SQL: ORA-01732: operación de manipulación de datos no válida en esta vista

Alguien tiene alguna idea? Gracias de antemano.
  #2 (permalink)  
Antiguo 20/05/2011, 14:54
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.977
Antigüedad: 9 años, 7 meses
Puntos: 358
Respuesta: Oracle Join Group by

Eso no es posible hacerlo.

Con que criterio haría esa actualización? Como repartiría los valores brutos que genera la consulta?

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 20/05/2011, 16:27
 
Fecha de Ingreso: enero-2006
Mensajes: 293
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: Oracle Join Group by

Pues, las columnas TABLA1.NUMERO y TABLA2.NUMERO tienen los mismos valores, y lo que intento es agrupar por ese campo

Por ejemplo.. where NUMERO = 1

Código:
--tabla1
NUMERO                 CANTIDAD               
---------------------- ---------------------- 
1                      10                     
1                      20                     
1                      30                     

--tabla2
NUMERO                 CANTIDAD               
---------------------- ---------------------- 
1                      10                     
1                      20
y quiero tener el resultado

Código:
NUMERO                 CANTIDAD1            CANTIDAD2   
---------------------- ----------------------  ---------------------- 

1                      60                     30

Etiquetas: group, join, update
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 19:44.