Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta update desde una consulta select (https://www.clubdelphi.com/foros/showthread.php?t=88253)

jafera 08-05-2015 15:10:08

Consulta update desde una consulta select
 
Buenas de nuevo.

Tengo la sigiente consulta sql:
Código SQL [-]
SELECT ANIO, ID_COLLA, SUM(PENALITZACIO) AS TOTAL_PEN FROM CAR0006
WHERE PENALITZACIO <> 0
GROUP BY ANIO, ID_COLLA
la cual me arroja el resultado esperado, ahora lo que necesitaria es realizar un update a otra tabla donde me coloque el valor de TOTAL_PEN si SELECT.ANIO = DESTINO.ANIO and SELECT.ID_COLLA = DESTINO.ID_COLLA

Algo como
Código SQL [-]
UPDATE CAR0006PEN SET TOTAL_PEN = (SELECT ANIO, ID_COLLA, SUM(PENALITZACIO) AS TOTAL_PEN FROM CAR0006 WHERE PENALITZACIO <> 0 GROUP BY ANIO, ID_COLLA) 
WHERE CAR0006SUM.ANIO = SELECT.ANIO AND CAR0006SUM.ID_COLLA = SELECT.ID_COLLA

No se si un update así es posible.

En la tabla destino CAR0006SUM la combinacion ID_COLLA, ANIO es unica, no se puede repetir este "array".

Gracias por vuestro tiempo.

Josep

Casimiro Notevi 08-05-2015 17:36:22

Código SQL [-]
UPDATE CAR0006PEN SET TOTAL_PEN = (SELECT ANIO, ID_COLLA, SUM(PENALITZACIO) AS TOTAL_PEN
Si haces el update de un campo, no puedes hacer el select de 3. ¿Cómo sabe la base de datos el campo que debe usar para el update?
Puedes hacerlo con un campo, algo así:
Código SQL [-]
update tabla set campo1= (select otrocampo from otra tabla ... )
Así el valor devuelto del select, se usa en el update.

ElDioni 08-05-2015 18:56:29

Yo lo haría con un while que fuera haciendo el UPDATE de año en año.

Código SQL [-]
UPDATE CAR0006PEN SET TOTAL_PEN = (SELECT SUM(PENALITZACIO) AS TOTAL_PEN WHERE ANIO=:year)

Saludos

TOPX 08-05-2015 19:56:02

Buenas.
Código SQL [-]
TRUNCATE TABLE CAR0006SUM;

INSERT INTO CAR0006SUM (ANIO, ID_COLLA, TOTAL_PEN) 
SELECT ANIO, ID_COLLA, SUM(PENALITZACIO) 
FROM CAR0006
WHERE PENALITZACIO <> 0
GROUP BY ANIO, ID_COLLA;
-


La franja horaria es GMT +2. Ahora son las 02:26:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi