Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/05/2011, 14:24
osvier
 
Fecha de Ingreso: enero-2006
Mensajes: 293
Antigüedad: 18 años, 11 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.