Ver Mensaje Individual
  #28 (permalink)  
Antiguo 14/03/2011, 09:54
dilinwe
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Normalmente el mensaje debería ser diferente. debería indicar "unknow column name" o algo así, y no "columna '' no válida".
Pero la cosa parece relativamente simple: Si la columna "período" está presente en todas las tablas que se piden, el error está en la tabla derivada "c", porque no se está pidiendo que también devuelva ese campo:
Código MySQL:
Ver original
  1.     a.Zona,
  2.     a.numero,
  3.     a.nombre,
  4.     a.variedad,
  5.     a.tmestimadas tmrecepcionadas,
  6.     b.potrero,
  7.     b.hassembradas superficie,
  8.     b.v1_rendimiento rdtoesperado,
  9.     (b.v1_rendimiento * b.hassembradas) tmestimadas,
  10.     c.nrocontrato,
  11.     c.rut
  12.     ag_Contrato a
  13.     INNER JOIN Ag_Potrero b ON a.periodo = b.periodo
  14.     INNER JOIN Ag_Visitaterreno v ON a.numero = v.nrocontrato AND a.periodo = v.periodo
  15.     INNER JOIN
  16.         (SELECT nrocontrato, rut, periodo, Sum(cantidad) Total
  17.         FROM Ag_recepcion2011
  18.         GROUP BY nrocontrato, rut) c ON a.periodo = c.periodo AND a.nroprecontrato = b.numero
  19.      a.periodo = $temporada
  20. ORDER BY a.numero

Cuando generas una tabla derivada en el FROM por medio de una subconsulta, tienes que indicar en esa subconsulta que devuelva todos los campos que se van a usar luego, y el ON siguiente está pidiendo precisamente el campo "periodo" de la tabla "Ag_recepcion2011".
Ya... primero puse el periodo dentro del select y me salio esto: La columna 'Ag_recepcion2011.periodo' de la lista de selección no es valida, porque no esta contenida en una funciun de agregado ni en la clausula GROUP BY...

Entonces la agregue en el Group By y me quedo así:

Código SQL:
Ver original
  1. SELECT DISTINCT
  2.           a.Zona,
  3.           a.numero,
  4.           a.nombre,
  5.           a.variedad,
  6.           a.tmestimadas tmrecepcionadas,
  7.           b.potrero,
  8.           b.hassembradas superficie,
  9.           b.v1_rendimiento rdtoesperado,
  10.           (b.v1_rendimiento * b.hassembradas) tmestimadas,
  11.           c.nrocontrato,
  12.           c.rut
  13.          
  14.       FROM
  15.      
  16.           ag_Contrato a
  17.           INNER JOIN Ag_Potrero b ON a.periodo = b.periodo
  18.           INNER JOIN Ag_Visitaterreno v ON a.numero = v.nrocontrato AND    a.periodo   = v.periodo
  19.           INNER JOIN (SELECT nrocontrato, rut, periodo, SUM(cantidad) Total FROM Ag_recepcion2011 GROUP BY nrocontrato, rut, periodo) c ON a.periodo = c.periodo AND a.nroprecontrato = b.numero
  20.              
  21.            WHERE
  22.            a.periodo = $temporada
  23.            ORDER BY a.numero";

Ahora al ejecutar la consulta se demora unos 10 segundos para luego en el post me aparezca "ABORTED" y con causas desconocidas del error.