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

update con el resultado de un select

Estas en el tema de update con el resultado de un select en el foro de Mysql en Foros del Web. tengo un tabla @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE TABLE `_tmp_venedors` (     `vdor` SMALLINT ( 6 ) NOT NULL ,     ...
  #1 (permalink)  
Antiguo 24/07/2018, 03:49
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 21 años, 7 meses
Puntos: 0
update con el resultado de un select

tengo un tabla
Código SQL:
Ver original
  1. CREATE TABLE `_tmp_venedors` (
  2.     `vdor` SMALLINT(6) NOT NULL,
  3.     `normal_completa_unidades` INT(11) NULL DEFAULT '0',
  4.     `normal_completa_importe` DOUBLE(9,2) NULL DEFAULT '0.00',
  5.     `normal_completa_dtomedio` DOUBLE(9,2) NULL DEFAULT '0.00',
  6.     `normal_completa_vtamedia` DOUBLE(9,2) NULL DEFAULT '0.00',
  7.     `normal_sinmontura_unidades` INT(11) NULL DEFAULT '0',
  8.     `normal_sinmontura_importe` DOUBLE(9,2) NULL DEFAULT '0.00',
  9.     `normal_sinmontura_dtomedio` DOUBLE(9,2) NULL DEFAULT '0.00',
  10.     `normal_sinmontura_vtamedia` DOUBLE(9,2) NULL DEFAULT '0.00',
  11.     `reparaciones_unidades` INT(11) NULL DEFAULT '0',
  12.     `reparaciones_importe` DOUBLE(9,2) NULL DEFAULT '0.00',
  13.     `sustituye_unidades` INT(11) NULL DEFAULT '0',
  14.     `sustituye_importe` DOUBLE(9,2) NULL DEFAULT '0.00',
  15.     `garantia_unidades` INT(11) NULL DEFAULT '0',
  16.     `garantia_importes` DOUBLE(9,2) NULL DEFAULT '0.00',
  17.     `promo_primera_operaciones` INT(11) NULL DEFAULT '0',
  18.     `promo_primera_importe` DOUBLE(9,2) NULL DEFAULT '0.00',
  19.     `promo_primera_vtamedia` DOUBLE(9,2) NULL DEFAULT '0.00',
  20.     `promo_segunda_consuple` INT(11) NULL DEFAULT '0',
  21.     `promo_segunda_sinsuple` INT(11) NULL DEFAULT '0',
  22.     `promo_segunda_importe` DOUBLE(9,2) NULL DEFAULT '0.00',
  23.     `promo_segunda_vtamedia` DOUBLE(9,2) NULL DEFAULT '0.00',
  24.     PRIMARY KEY (`vdor`),
  25.     UNIQUE INDEX `vdor` (`vdor`)
  26. )

donde debo acumular por vendedor los resultados de diferentes consultas sobre varias tablas para mostrar el resultado

como puedo actualizar los campos normal_completa_unidades, normal_completa_importe, normal_ completa_dto_medio y normal_completa_vtamedia de la consulta siguiente

Código SQL:
Ver original
  1. SELECT encargos.vendedorVta, COUNT(*) AS operaciones, SUM(encargos.impnetoVta) AS impvta,  round(avg(encargos.impdtoVta),2) AS avgdto, round(avg(impnetoVta),2) AS vtamedia
  2. FROM encargos
  3. WHERE anuladaVta<>"S" AND fechaVta BETWEEN '2018-07-01' AND '2018-07-31' AND promocionVta=0 AND TRIM(monturaVta)>''
  4. GROUP BY vendedorVta
  5. ORDER BY vendedorVta

pensaba que deberia ser algo similar al codigo que detallo pero esta mal construida la sent
Código SQL:
Ver original
  1. UPDATE tmp_venedors
  2. SET (normal_completa_unidades, normal_completa_importe, normal_ completa_dto_medio , normal_completa_vtamedia)
  3. FROM
  4. (SELECT encargos.vendedorVta, COUNT(*) AS operaciones, SUM(encargos.impnetoVta) AS impvta,  round(avg(encargos.impdtoVta),2) AS avgdto, round(avg(impnetoVta),2) AS vtamedia
  5. FROM encargos
  6. WHERE anuladaVta<>"S" AND fechaVta BETWEEN '2018-07-01' AND '2018-07-31' AND promocionVta=0 AND TRIM(monturaVta)>''
  7. GROUP BY vendedorVta)
  8.  
  9. WHERE vdor=vendedorVta

me podeis ayudar en esta instrucción.

Gracias

Última edición por gnzsoloyo; 24/07/2018 a las 08:18 Razón: Mal etiquetado
  #2 (permalink)  
Antiguo 24/07/2018, 07:15
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: update con el resultado de un select

El update con select es de la siguiente manera:

update tabla
set valor1=valor_consulta,
valor2=valor_consulta2
from
(tu select)
condiciones


A tu codigo le falta especificar cual es el valor que va a tomar cada columna afectada
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 24/07/2018, 10:00
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 21 años, 7 meses
Puntos: 0
Respuesta: update con el resultado de un select

de acuerdo a lo que entiendo de tu respuesta hago lo siguiente
Código SQL:
Ver original
  1. UPDATE tmp_venedors
  2. SET normal_completa_unidades = t.operaciones,
  3.     normal_completa_importe = t.impvta,
  4.      normal_completa_dto_medio = t.avgdto,
  5.      normal_completa_vtamedia = t.vtamedia
  6. FROM
  7. ( SELECT vendedorVta, COUNT(*) AS operaciones, SUM(impnetoVta) AS impvta,  
  8.          round(avg(impdtoVta),2) AS avgdto, round(avg(impnetoVta),2) AS vtamedia
  9. FROM encargos t
  10. WHERE anuladaVta<>"S" AND fechaVta BETWEEN '2018-07-01' AND '2018-07-31' AND promocionVta=0 AND TRIM(monturaVta)>''
  11. GROUP BY vendedorVta )
  12.  
  13. WHERE vdor=t.vendedorVta
[/CODE]
y me da un error de sintaxis en la linea del FROM

Última edición por gnzsoloyo; 25/07/2018 a las 05:12
  #4 (permalink)  
Antiguo 24/07/2018, 13:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: update con el resultado de un select

Código MySQL:
Ver original
  1. UPDATE tmp_venedors
  2. SET normal_completa_unidades = completa.operaciones,
  3.     normal_completa_importe = completa.impvta,
  4.      normal_completa_dto_medio = completa.avgdto,
  5.      normal_completa_vtamedia = completa.vtamedia
  6. ( SELECT vendedorVta, COUNT(*) AS operaciones, SUM(impnetoVta) AS impvta,  
  7.          round(avg(impdtoVta),2) AS avgdto, round(avg(impnetoVta),2) AS vtamedia
  8. FROM encargos t
  9. WHERE anuladaVta<>"S" AND fechaVta BETWEEN '2018-07-01' AND '2018-07-31' AND promocionVta=0 AND TRIM(monturaVta)>''
  10. GROUP BY vendedorVta ) as completa
  11.  
  12. WHERE vdor=completa.vendedorVta
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 25/07/2018, 05:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: update con el resultado de un select

Cita:
Iniciado por mikil Ver Mensaje
y me da un error de sintaxis en la linea del FROM
Te da un error porque toda tabla derivada (tabla resultado de una subconsulta que se encuentre en el FROM de otra consulta mayor) obligatoriamente debe tener un ALIAS. De lo contrario el DBMS no sabe de qué bloque de datos debe tomar los resultados.

Es algo del SQL estandar, no te lo olvides. Suele ser un error muy común al inicio del uso de este lenguaje...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 26/07/2018, 05:37
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 21 años, 7 meses
Puntos: 0
Respuesta: update con el resultado de un select

sigue dando el mismo error en la linea del FROM
Código SQL:
Ver original
  1. UPDATE _tmp_venedors
  2. SET normal_completa_unidades = t1.operaciones,
  3.     normal_completa_importe = t1.impvta,
  4.     normal_completa_dtomedio = t1.avgdto,
  5.     normal_completa_vtamedia = t1.vtamedia
  6. FROM
  7. ( SELECT vendedorVta, COUNT(*) AS operaciones, SUM(impnetoVta) AS impvta,  
  8.          round(avg(impdtoVta),2) AS avgdto, round(avg(impnetoVta),2) AS vtamedia
  9. FROM encargos
  10. WHERE anuladaVta<>"S" AND fechaVta BETWEEN '2018-07-01' AND '2018-07-31' AND promocionVta=0 AND TRIM(monturaVta)>''
  11. GROUP BY vendedorVta ) AS t1
  12.  
  13. WHERE vdor=t1.vendedorVta
[/code]

he cambiado el nombre del alias por t1 para que se entienda mejor

Última edición por gnzsoloyo; 26/07/2018 a las 10:33
  #7 (permalink)  
Antiguo 26/07/2018, 08:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: update con el resultado de un select

yo veo bien el query, podrias poner el mensaje de error completo?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 26/07/2018, 23:51
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 506
Antigüedad: 21 años, 7 meses
Puntos: 0
Respuesta: update con el resultado de un select

Error de SQL (1064): You have an error in your SQL syntax; check the manual ... near
'FROM
( SELECT vendedorVta, COUNT(*) AS operaciones, SUM(impnetoVta) AS impvta, ' at line 6

Etiquetas: campo, resultado, select, tablas, 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 23:12.