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

query para una suma

Estas en el tema de query para una suma en el foro de Bases de Datos General en Foros del Web. quisiera saber como hago un query para sumar campos asociados a un número. bueno aqui lo que necesito: Las TM recepción es la suma de ...

  #1 (permalink)  
Antiguo 08/03/2011, 08:59
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta query para una suma

quisiera saber como hago un query para sumar campos asociados a un número.
bueno aqui lo que necesito:

Las TM recepción es la suma de todas las recepciones
(campo ag_recepcion.cantidad)
del número de contrato (ag_recepcion.nrocontrato)
asociado al potrero que esta mostrando.

Es decir sum(cantidad)
Where periodo = 2011
and rut = '99999-9'
and nrocontrato = 99999
and potrero = 'nombre del potrero'

Esto... como lo hago en sql?

Empezé con algo pero esta incompleto: select sum(cantidad) from ag_recepcion2011 as a, where a.nrocontrato=b.potrero
  #2 (permalink)  
Antiguo 08/03/2011, 10:47
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, 7 meses
Puntos: 774
Respuesta: query para una suma

Cuales son las tablas y los campos de las tablas??

Porque si dices un sum de una tabla seria:


select sum(campo) from tabla where periodo = 2011
and rut = '99999-9'
and nrocontrato = 99999
and potrero = 'nombre del potrero'

Ya que si son 2 tablas seria

selec sum(a.campo) from tabla a, tabla b where a.campoid=b.campoid and periodo = 2011
and rut = '99999-9'
and nrocontrato = 99999
and potrero = 'nombre del potrero'
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 09/03/2011, 07:17
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

mi problema es que son demasiados números de contrato (cerca de 500) y lo que necesito es sumar la cantidad de estos agrupados por nrocontrato, algo asi como un resultado final, y tengo una sola tabla la ag_recepcion2011 que es la que contiene todos los campos necesarios.
  #4 (permalink)  
Antiguo 09/03/2011, 08:28
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, 7 meses
Puntos: 774
Respuesta: query para una suma

select sum(campo) from tabla where periodo = 2011
and rut = '99999-9'
and nrocontrato = 99999
and potrero = 'nombre del potrero'
group by nrocontrato

Segun lo que explicas quedaria asi, si puedes poner algunos datos de ejemplo de tu tabla estaria mucho mejor :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 09/03/2011, 09:54
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por Libras Ver Mensaje
select sum(campo) from tabla where periodo = 2011
and rut = '99999-9'
and nrocontrato = 99999
and potrero = 'nombre del potrero'
group by nrocontrato

Segun lo que explicas quedaria asi, si puedes poner algunos datos de ejemplo de tu tabla estaria mucho mejor :)

Saludos!
a ver... en la tabla ag_recepcion tengo un campo llamado cantidad y otro nrocontrato ahh y tambien rut:

cantidad nrocontrato rut
=========================
324324 1000 9235443 -5
324543 1000 9235443 -5
231324 1000 9235443 -5
=========================
123124 1001 2384373-4
214123 1001 2384373-4
124322 1001 2384373-4

lo que necesito es sumar la cantidad 324324+324543+231324 del contrato 1000
y este valor quedaria en otro campo, algo asi como un resultado... lo mismo con el contrato 1001, 1002, 1003.... etc.
  #6 (permalink)  
Antiguo 09/03/2011, 10:12
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: query para una suma

Francamente no se comprende en qué consiste tu problema, ya que una consulta agrupada simple debería alcanzar, dado del contexto de lo que quieres:
Código MySQL:
Ver original
  1. SELECT nrocontrato, rut, SUM(cantidad) Total
  2. FROM tabla
  3. WHERE periodo = 2011
  4. GROUP BY nrocontrato, rut;
Esto devolverá todos los resultados agrupados por contato y rut.
Ahora bien, si lo que quieres es el valor como subtotal, pero listando los valores de cada registro más la suma, la cosa cambia porque eso varía un poco según el DBMS que uses, y ese detalle no lo estás diciendo.

¿Qué usas?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 09/03/2011, 12:45
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Francamente no se comprende en qué consiste tu problema, ya que una consulta agrupada simple debería alcanzar, dado del contexto de lo que quieres:
Código MySQL:
Ver original
  1. SELECT nrocontrato, rut, SUM(cantidad) Total
  2. FROM tabla
  3. WHERE periodo = 2011
  4. GROUP BY nrocontrato, rut;
Esto devolverá todos los resultados agrupados por contato y rut.
Ahora bien, si lo que quieres es el valor como subtotal, pero listando los valores de cada registro más la suma, la cosa cambia porque eso varía un poco según el DBMS que uses, y ese detalle no lo estás diciendo.

¿Qué usas?
El dbms que estoy usando es Microsoft SQL Server 2005 y en cuanto a la página, utilizo ext javascript.
  #8 (permalink)  
Antiguo 09/03/2011, 13:09
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: query para una suma

Ajá... ¿Y cual de las dos opciones necesitas:
Código SQL:
Ver original
  1. ======================================================
  2. nrocontrato    rut        cantidad    Total
  3. ======================================================
  4. 1000        9235443-5    324324
  5. 1000        9235443-5    324543
  6. 1000        9235443-5    231324
  7.                             880191
  8. ======================================================
  9. 1001        2384373-4    123124
  10. 1001        2384373-4    214123
  11. 1001        2384373-4    124322
  12.                             461569
  13. ======================================================
o bien:
Código SQL:
Ver original
  1. ======================================================
  2. nrocontrato    rut        Total
  3. ======================================================
  4. 1000        9235443-5    880191
  5. ======================================================
  6. 1001        2384373-4    461569
  7. ======================================================
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 09/03/2011, 13:26
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Ajá... ¿Y cual de las dos opciones necesitas:
Código SQL:
Ver original
  1. ======================================================
  2. nrocontrato    rut        cantidad    Total
  3. ======================================================
  4. 1000        9235443-5    324324
  5. 1000        9235443-5    324543
  6. 1000        9235443-5    231324
  7.                             880191
  8. ======================================================
  9. 1001        2384373-4    123124
  10. 1001        2384373-4    214123
  11. 1001        2384373-4    124322
  12.                             461569
  13. ======================================================
o bien:
Código SQL:
Ver original
  1. ======================================================
  2. nrocontrato    rut        Total
  3. ======================================================
  4. 1000        9235443-5    880191
  5. ======================================================
  6. 1001        2384373-4    461569
  7. ======================================================
La segunda definitivamente, ya que muestra simplificado solo el resultado.
  #10 (permalink)  
Antiguo 09/03/2011, 13:33
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, 7 meses
Puntos: 774
Respuesta: query para una suma

Eso lo resuelves con este codigo no??

SELECT nrocontrato, rut, SUM(cantidad) Total
FROM tabla
WHERE periodo = 2011
GROUP BY nrocontrato, rut;
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 09/03/2011, 13:41
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

exacto... muchas gracias por responder el ultimo query ha funcionado de maravillas, ahora lo voy a implementar en las funciones haber si funciona en la pagina web tambien.
Saludos!
  #12 (permalink)  
Antiguo 09/03/2011, 13:45
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: query para una suma

¿A quién le preguntas?

En realidad hay dos formas de hacerlo:
Código SQL:
Ver original
  1. SELECT nrocontrato, rut, SUM(cantidad) Total
  2. FROM tabla
  3. WHERE periodo = 2011
  4. GROUP BY nrocontrato, rut
  5. WITH CUBE

y otra:
Código SQL:
Ver original
  1. SELECT nrocontrato, rut, SUM(cantidad) Total
  2. FROM tabla
  3. WHERE periodo = 2011
  4. GROUP BY nrocontrato, rut
  5. WITH ROLLUP
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 09/03/2011, 13:54
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿A quién le preguntas?

En realidad hay dos formas de hacerlo:
Código SQL:
Ver original
  1. SELECT nrocontrato, rut, SUM(cantidad) Total
  2. FROM tabla
  3. WHERE periodo = 2011
  4. GROUP BY nrocontrato, rut
  5. WITH CUBE

y otra:
Código SQL:
Ver original
  1. SELECT nrocontrato, rut, SUM(cantidad) Total
  2. FROM tabla
  3. WHERE periodo = 2011
  4. GROUP BY nrocontrato, rut
  5. WITH ROLLUP
ok cxompadre igual la voy intentar.
  #14 (permalink)  
Antiguo 09/03/2011, 15:16
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

una ultima duda:
¿Cómo lo hago para introducirlo en un subquery?
Código SQL:
Ver original
  1. "grillaHas":
  2.             $consulta="SELECT DISTINCT a.zona,a.numero,a.nombre,a.variedad,a.tmestimadas as tmrecepcionadas,
  3.  
  4.                         b.potrero,b.hassembradas as superficie,b.v1_rendimiento AS rdtoEsperado,
  5.                        
  6.                        (b.v1_rendimiento*b.hassembradas) as tmestimadas, c.nrocontrato , c.rut, SUM(c.cantidad) as tmrecepcionadas
  7.                         GROUP BY c.rut, c.nrocontrato
  8.  
  9.  
  10. FROM AG_Contrato as a, AG_potrero as b, ag_visitaterreno v, ag_recepcion2011 c
  11. WHERE
  12. c.periodo='2011' AND
  13. a.nroprecontrato=b.numero AND
  14. a.periodo=b.periodo AND
  15. a.numero=v.nrocontrato AND
  16. a.periodo=v.periodo AND
  17. a.periodo=$temporada order by a.numero"
en este caso?
  #15 (permalink)  
Antiguo 09/03/2011, 16:11
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, 7 meses
Puntos: 774
Respuesta: query para una suma

Para insertarlo como campo o como que???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 10/03/2011, 09:14
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por Libras Ver Mensaje
Para insertarlo como campo o como que???
como el campo tmrecepcionadas
  #17 (permalink)  
Antiguo 10/03/2011, 13:30
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, 7 meses
Puntos: 774
Respuesta: query para una suma

Código SQL:
Ver original
  1. "grillaHas":
  2.             $consulta="SELECT DISTINCT a.zona,a.numero,a.nombre,a.variedad,a.tmestimadas as tmrecepcionadas,
  3.  
  4.                         b.potrero,b.hassembradas as superficie,b.v1_rendimiento AS rdtoEsperado,
  5.                        
  6.                        (b.v1_rendimiento*b.hassembradas) as tmestimadas, c.nrocontrato , c.rut, (SELECT nrocontrato, rut, SUM(cantidad) Total
  7. FROM tabla
  8. WHERE periodo = 2011
  9. GROUP BY nrocontrato, rut) as tmrecepcionadas
  10.                         GROUP BY c.rut, c.nrocontrato
  11.  
  12.  
  13. FROM AG_Contrato as a, AG_potrero as b, ag_visitaterreno v, ag_recepcion2011 c
  14. WHERE
  15. c.periodo='2011' AND
  16. a.nroprecontrato=b.numero AND
  17. a.periodo=b.periodo AND
  18. a.numero=v.nrocontrato AND
  19. a.periodo=v.periodo AND
  20. a.periodo=$temporada order by a.numero"

Podria ser asi, no se si te funcione?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #18 (permalink)  
Antiguo 10/03/2011, 14:04
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. "grillaHas":
  2.             $consulta="SELECT DISTINCT a.zona,a.numero,a.nombre,a.variedad,a.tmestimadas as tmrecepcionadas,
  3.  
  4.                         b.potrero,b.hassembradas as superficie,b.v1_rendimiento AS rdtoEsperado,
  5.                        
  6.                        (b.v1_rendimiento*b.hassembradas) as tmestimadas, c.nrocontrato , c.rut, (SELECT nrocontrato, rut, SUM(cantidad) Total
  7. FROM tabla
  8. WHERE periodo = 2011
  9. GROUP BY nrocontrato, rut) as tmrecepcionadas
  10.                         GROUP BY c.rut, c.nrocontrato
  11.  
  12.  
  13. FROM AG_Contrato as a, AG_potrero as b, ag_visitaterreno v, ag_recepcion2011 c
  14. WHERE
  15. c.periodo='2011' AND
  16. a.nroprecontrato=b.numero AND
  17. a.periodo=b.periodo AND
  18. a.numero=v.nrocontrato AND
  19. a.periodo=v.periodo AND
  20. a.periodo=$temporada order by a.numero"

Podria ser asi, no se si te funcione?
mmm me tira un error en el 'as': Sintaxis incorrecta cerca de la palabra clave 'as',
pero gracias por la ayuda!
  #19 (permalink)  
Antiguo 10/03/2011, 14:10
 
Fecha de Ingreso: enero-2007
Ubicación: Cali - Valle
Mensajes: 135
Antigüedad: 17 años, 2 meses
Puntos: 4
Respuesta: query para una suma

Y si lo realizas de la siguiente forma:

Código SQL:
Ver original
  1. "grillaHas":
  2.             $consulta="
  3. Select Distinct a.Zona,
  4.                a.Numero,
  5.                a.Nombre,
  6.                a.Variedad,
  7.                a.Tmestimadas As Tmrecepcionadas,
  8.                b.Potrero,
  9.                b.Hassembradas As Superficie,
  10.                b.V1_Rendimiento As Rdtoesperado,
  11.                (b.V1_Rendimiento * b.Hassembradas) As Tmestimadas,
  12.                c.Nrocontrato,
  13.                c.Rut,
  14.                (Select Nrocontrato,
  15.                        Rut,
  16.                        Sum(Cantidad) Total
  17.                   From Tabla
  18.                  Where Periodo = c.Periodo -- Valor Reemplazado para que lo tome de las tablas externas
  19.                    And Nrocontrato = v.Nrocontrato -- Adicionado para que traiga los datos con respecto a un Numero de Contrato
  20.                  Group By Nrocontrato,
  21.                           Rut) As Tmrecepcionadas
  22. Group By c.Rut,
  23.          c.Nrocontrato
  24.  From Ag_Contrato      As a,
  25.       Ag_Potrero       As b,
  26.       Ag_Visitaterreno v,
  27.       Ag_Recepcion2011 c
  28. Where a.Nroprecontrato = b.Numero
  29.   And a.Periodo = b.Periodo
  30.   And a.Numero = v.Nrocontrato
  31.   And a.Periodo = v.Periodo
  32.   And a.Periodo = $temporada
  33.   And c.Periodo = a.Periodo
  34. Order By a.Numero
  35. "

Asi te puede servir pero no estoy seguro ya que no lo probe.

Saludos.
  #20 (permalink)  
Antiguo 10/03/2011, 14:28
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por scooby151 Ver Mensaje
Y si lo realizas de la siguiente forma:

Código SQL:
Ver original
  1. "grillaHas":
  2.             $consulta="
  3. Select Distinct a.Zona,
  4.                a.Numero,
  5.                a.Nombre,
  6.                a.Variedad,
  7.                a.Tmestimadas As Tmrecepcionadas,
  8.                b.Potrero,
  9.                b.Hassembradas As Superficie,
  10.                b.V1_Rendimiento As Rdtoesperado,
  11.                (b.V1_Rendimiento * b.Hassembradas) As Tmestimadas,
  12.                c.Nrocontrato,
  13.                c.Rut,
  14.                (Select Nrocontrato,
  15.                        Rut,
  16.                        Sum(Cantidad) Total
  17.                   From Tabla
  18.                  Where Periodo = c.Periodo -- Valor Reemplazado para que lo tome de las tablas externas
  19.                    And Nrocontrato = v.Nrocontrato -- Adicionado para que traiga los datos con respecto a un Numero de Contrato
  20.                  Group By Nrocontrato,
  21.                           Rut) As Tmrecepcionadas
  22. Group By c.Rut,
  23.          c.Nrocontrato
  24.  From Ag_Contrato      As a,
  25.       Ag_Potrero       As b,
  26.       Ag_Visitaterreno v,
  27.       Ag_Recepcion2011 c
  28. Where a.Nroprecontrato = b.Numero
  29.   And a.Periodo = b.Periodo
  30.   And a.Numero = v.Nrocontrato
  31.   And a.Periodo = v.Periodo
  32.   And a.Periodo = $temporada
  33.   And c.Periodo = a.Periodo
  34. Order By a.Numero
  35. "

Asi te puede servir pero no estoy seguro ya que no lo probe.

Saludos.
Gracias amigo ahora mismo lo pruebo!
  #21 (permalink)  
Antiguo 10/03/2011, 15:07
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por dilinwe Ver Mensaje
Gracias amigo ahora mismo lo pruebo!
mm me arroja un error parecido al otro y eso que le cambie las variables que habia que cambiar, sin mas preambulos el error es el siguiente:
Sintaxis incorrecta cerca de la palabra clave 'from', pienso que debe ser de este from: From ag_Contrato As a,
Ag_Potrero As b,
Ag_Visitaterreno v,
Ag_recepcion2011 c
He probado mil maneras el query, pero ninguna da resultados...

Código SQL:
Ver original
  1. "grillaHas": $consulta="
  2.      Select Distinct a.Zona,
  3.                     a.numero,
  4.                     a.nombre,
  5.                     a.variedad,
  6.                     a.tmestimadas As tmrecepcionadas,
  7.                     b.potrero,  
  8.                     b.hassembradas As superficie,
  9.                     b.v1_rendimiento As rdtoesperado,
  10.                     (b.v1_rendimiento * b.hassembradas) as tmestimadas,  
  11.                     c.nrocontrato,  
  12.                     c.rut,
  13.                     (Select nrocontrato, rut, Sum(cantidad) Total
  14.                        From Ag_recepcion2011  Where periodo = c.periodo
  15.                        And nrocontrato = v.nrocontrato
  16.                        Group By nrocontrato, rut) As tmrecepcionadas Group By c.rut, c.nrocontrato
  17.  
  18.       From ag_Contrato As a,
  19.            Ag_Potrero As b,
  20.            Ag_Visitaterreno v,
  21.            Ag_recepcion2011 c
  22.            
  23.      Where a.nroprecontrato = b.numero
  24.        And a.periodo = b.periodo
  25.        And a.numero = v.nrocontrato
  26.        And a.periodo = v.periodo
  27.        And a.periodo = $temporada
  28.        And c.periodo = a.periodo
  29.  
  30.      Order By a.numero";

Así fue como lo dejé al final.
  #22 (permalink)  
Antiguo 10/03/2011, 15: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, 7 meses
Puntos: 774
Respuesta: query para una suma

Prueba asi:



Select Distinct a.Zona,
a.numero,
a.nombre,
a.variedad,
a.tmestimadas As tmrecepcionadas,
b.potrero,
b.hassembradas As superficie,
b.v1_rendimiento As rdtoesperado,
(b.v1_rendimiento * b.hassembradas) as tmestimadas,
c.nrocontrato,
c.rut,
(Select nrocontrato, rut, Sum(cantidad) Total
From Ag_recepcion2011 Where periodo = c.periodo
And nrocontrato = v.nrocontrato
Group By nrocontrato, rut) As tmrecepcionadas
, c.nrocontrato

From ag_Contrato As a,
Ag_Potrero As b,
Ag_Visitaterreno v,
Ag_recepcion2011 c

Where a.nroprecontrato = b.numero
And a.periodo = b.periodo
And a.numero = v.nrocontrato
And a.periodo = v.periodo
And a.periodo = $temporada
And c.periodo = a.periodo

Order By a.numero


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #23 (permalink)  
Antiguo 11/03/2011, 07:27
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por Libras Ver Mensaje
Prueba asi:



Select Distinct a.Zona,
a.numero,
a.nombre,
a.variedad,
a.tmestimadas As tmrecepcionadas,
b.potrero,
b.hassembradas As superficie,
b.v1_rendimiento As rdtoesperado,
(b.v1_rendimiento * b.hassembradas) as tmestimadas,
c.nrocontrato,
c.rut,
(Select nrocontrato, rut, Sum(cantidad) Total
From Ag_recepcion2011 Where periodo = c.periodo
And nrocontrato = v.nrocontrato
Group By nrocontrato, rut) As tmrecepcionadas
, c.nrocontrato

From ag_Contrato As a,
Ag_Potrero As b,
Ag_Visitaterreno v,
Ag_recepcion2011 c

Where a.nroprecontrato = b.numero
And a.periodo = b.periodo
And a.numero = v.nrocontrato
And a.periodo = v.periodo
And a.periodo = $temporada
And c.periodo = a.periodo

Order By a.numero


Saludos!
tampoco... nada me resulta, me sigue dando el error en el "from" o en el "group by"
  #24 (permalink)  
Antiguo 11/03/2011, 07:47
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: query para una suma

Tal vez por aquí:
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, 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
No uso la coma sino INNER JOIN porque el WHERE es una mala forma de relacionar tablas, no es optimizable, mientas que el FROM si, pero para ello tienes que escribirlos con más cuidado.
Tampoco pongo los AS porque son obsoletos, están eliminados del estándar hace años, y sólo sirven si usas DBMS muy viejos (3.x o anterior).
El error más grave que veía es que intentabas obtener en un SELECT algo que devuelve más de un campo, y una subconsulta allí debe devolver una única columna, además de que estabas haciendolo sobre una tabla que ya estás invocando en el FROM. Eso no tiene mucho sentido.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 11/03/2011 a las 07:53
  #25 (permalink)  
Antiguo 11/03/2011, 08:09
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tal vez por aquí:
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, 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
No uso la coma sino INNER JOIN porque el WHERE es una mala forma de relacionar tablas, no es optimizable, mientas que el FROM si, pero para ello tienes que escribirlos con más cuidado.
Tampoco pongo los AS porque son obsoletos, están eliminados del estándar hace años, y sólo sirven si usas DBMS muy viejos (3.x o anterior).
El error más grave que veía es que intentabas obtener en un SELECT algo que devuelve más de un campo, y una subconsulta allí debe devolver una única columna, además de que estabas haciendolo sobre una tabla que ya estás invocando en el FROM. Eso no tiene mucho sentido.
Vale compadre, se nota que te manejas bastante en estos temas, espero algun dia ser asi de bueno... Saludos y espero que ahora funcione.
  #26 (permalink)  
Antiguo 14/03/2011, 07:44
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por dilinwe Ver Mensaje
Vale compadre, se nota que te manejas bastante en estos temas, espero algun dia ser asi de bueno... Saludos y espero que ahora funcione.
ahora si lo testee y me da el siguiente error El nombre de columna 'periodo' no es v�lido."} en la parte del from, lo comprobe borrando los valores.
  #27 (permalink)  
Antiguo 14/03/2011, 08:23
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: query para una suma

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".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #28 (permalink)  
Antiguo 14/03/2011, 09:54
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 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.
  #29 (permalink)  
Antiguo 14/03/2011, 10:08
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: query para una suma

Puede ser un problema de performance por falta de selectividad.
Creale un indice a la tabla Ag_recepcion2011 sobre los campos "nrocontrato", "rut" y "periodo".
Un indice sobre ag_Contrato.periodo podría ser también una buena idea.

Por lo menos no indica errores de sintaxis...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #30 (permalink)  
Antiguo 14/03/2011, 13:45
 
Fecha de Ingreso: enero-2011
Mensajes: 35
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: query para una suma

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Puede ser un problema de performance por falta de selectividad.
Creale un indice a la tabla Ag_recepcion2011 sobre los campos "nrocontrato", "rut" y "periodo".
Un indice sobre ag_Contrato.periodo podría ser también una buena idea.

Por lo menos no indica errores de sintaxis...
Ahora si funciono.. pero a medias ya que no me muestra nada en pantalla pero tengo un boton que exporta las grillas hacia excel y al exportarlas me llevo la sorpresa que estan todos los valores que debieran aparecer.

¿Será algun problema de Extjs el no mostrar los valores en la página?

Etiquetas: query, suma, bases-de-datos
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 03:34.