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

Update con SUM (Access)

Estas en el tema de Update con SUM (Access) en el foro de Bases de Datos General en Foros del Web. Hola tengo que actualizar 2 campos de una tabla. Esos dos campos corresponden a la suma de otra tabla. EJEMPLO @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver ...
  #1 (permalink)  
Antiguo 20/05/2010, 09:00
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 1 mes
Puntos: 156
Pregunta Update con SUM (Access)

Hola

tengo que actualizar 2 campos de una tabla. Esos dos campos corresponden a la suma de otra tabla.

EJEMPLO
Código SQL:
Ver original
  1. UPDATE mes INNER JOIN historia ON mes.codigo=historias.codigo SET mes.gasto=SUM(historia.gastoL), mes.devoluciones=SUM(historia.devoluciones)  WHERE mes.codigo=xxxxx

Pero da error: "ha intentado ejecutar una consulta que no incluye la expresion especificada 'gasto' como parte de una función de agregado"

¿Alguna idea de como hacer un update con 2 sum?

LLevo todo el día buscando por internet, y lhe visto que el ejemplo que he puesto lo han dado por válido en otros sitios ¿? pero no funciona....
__________________
Saludos
  #2 (permalink)  
Antiguo 20/05/2010, 09:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Update con SUM (Access)

Hay dos problemas:
1) No puedes usar una función agregada en un UPDATE, a menos que sea para devoler un sólo dato en una subconsulta.
Código MySQL:
Ver original
  1. UPDATE mes
  2. SET mes.gasto=(SELECT SUM(historia.gastoL) FROM historia WHERE mes.codigo=historias.codigo),
  3.       mes.devoluciones=(SELECT SUM(historia.devoluciones) FROM historia WHERE  mes.codigo=historias.codigo)
  4. WHERE mes.codigo=xxxxx

2) No se puede usar la misa tabla para calcular la suma que la que usas para actualizar. Esto es, no puedes sumar
Código MySQL:
Ver original
  1. mes.gasto=sum(historia.gastoL)
Si estás haciendo
Código MySQL:
Ver original
  1. UPDATE mes
Es por un problema de lógica: Si te permite leer y actualizar la misma tabla, podrías actualizar campos que son los mismos usados en un WHERE, con lo cual al mismo tiempo serían seleccionables y no seleccionables.
¿Se entiende la idea?
Es un problema de seguridad de procesos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 20/05/2010, 09:13
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: Update con SUM (Access)

freegirl...
tal vez así:

Código SQL:
Ver original
  1. UPDATE mes
  2. INNER JOIN
  3. historia
  4. ON
  5. mes.codigo=historias.codigo
  6. SET
  7. mes.gasto=(SELECT SUM(historia.gastoL) FROM historia),
  8. mes.devoluciones=(SELECT SUM(historia.devoluciones) FROM historia)  
  9. WHERE mes.codigo=xxxxx

Que sería equivalente a:
Código SQL:
Ver original
  1. UPDATE mes
  2. SET
  3. mes.gasto=(SELECT SUM(historia.gastoL) FROM historia),
  4. mes.devoluciones=(SELECT SUM(historia.devoluciones) FROM historia)  
  5. WHERE mes.codigo=xxxxx
Eso es lo que interpreto del error.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 20/05/2010, 09:15
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 1 mes
Puntos: 156
Respuesta: Update con SUM (Access)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Hay dos problemas:
pues te aseguro que hay gente que dice que le funciona. Me he pasado todo el día buscando....O mienten, o funciona.


el código que comentas dará error:

UPDATE mes
SET mes.gasto=(SELECT SUM(historia.gastoL) FROM historia WHERE mes.codigo=historias.codigo),
mes.devoluciones=(SELECT SUM(historia.devoluciones) FROM historia WHERE mes.codigo=historias.codigo)
WHERE mes.codigo=xxxxx



Código SQL:
Ver original
  1. UPDATE mes
  2.  
  3.       SET
  4.  
  5.       mes.gasto=(SELECT SUM(historia.gastoL) FROM historia),
  6.  
  7.       mes.devoluciones=(SELECT SUM(historia.devoluciones) FROM historia)  
  8.  
  9.       WHERE mes.codigo=xxxxx




eso ya lo probé y también me daba error "la operación debe ser una consulta actualizable"
__________________
Saludos

Última edición por freegirl; 20/05/2010 a las 09:28
  #5 (permalink)  
Antiguo 20/05/2010, 09:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Update con SUM (Access)

¿Qué DBMS?
__________________
¿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 20/05/2010, 09:39
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 21 años, 1 mes
Puntos: 156
Respuesta: Update con SUM (Access)

en el título ya lo puse. Access.

La ataco desde VB.NET (pero eso da igual. El error es el mismo)
__________________
Saludos

Etiquetas: access, sum, 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 21:19.