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

[SOLUCIONADO] Calcular campo de promedio

Estas en el tema de Calcular campo de promedio en el foro de SQL Server en Foros del Web. Hola a todos: La funcion avd calcula el precio medio, pero esta formula esta mal ya que no es lo mismo comprar dos veces la ...
  #1 (permalink)  
Antiguo 03/11/2014, 17:39
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 16 años, 11 meses
Puntos: 2
Calcular campo de promedio

Hola a todos:

La funcion avd calcula el precio medio, pero esta formula esta mal ya que no es lo mismo comprar dos veces la misma cantidad a diferente precio que compras cantidades diferentes a precios distintos.

1 x 100 = 100
25 x 75 = 1875, el precio medio es 75.96 y la forma que calcula la siguiente sentencia sql sale 87.5 por suma los precios y los divide por dos. Y esto no es correcto.

Código SQL:
Ver original
  1. TRANSFORM SUM(lfc.[Uds Servidas]) AS [El valor]
  2. SELECT lfc.Producto AS Articulo, SUM(lfc.[Uds Servidas]) AS Total,
  3. Articulos.Nombre AS NombArti, Avg(lfc.[PVP de la Unidad]) AS MaxPrec,
  4. SUM(lfc.[Importe Neto]) AS TotaArti
  5. FROM ([Lineas Facturacion Compras] AS lfc INNER JOIN [Cabecera Facturacion Compras] AS cfc
  6. ON (lfc.Serie = cfc.Serie) AND
  7. (lfc.Numero = cfc.Numero))
  8. INNER JOIN Articulos ON lfc.Producto = Articulos.Codigo
  9. GROUP BY lfc.Producto, Articulos.Nombre
  10. ORDER BY Articulos.Nombre
  11. PIVOT format([Fecha], 'mmm') IN ('Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic');

He intentado cambiar la funcion avg por (TotaArti / Total), pero nada.

Si alguien sabe se sql


Un saludo.

Última edición por gnzsoloyo; 03/11/2014 a las 17:56 Razón: Código de programacion no permitido en foros de BBDD.
  #2 (permalink)  
Antiguo 03/11/2014, 17:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Calcular campo de promedio

Avg es promedio y un promedio es la suma de los datos entre el total de los mismos, segun tu que es el precio medio??? la media de los datos??? como sacas 75.96???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 03/11/2014, 18:47
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Calcular campo de promedio

Hola.

Solo tienes que hace la multiplicacion al reves

si multiplicas los 26 por 75.96 veras que el total de compras.

si compras las mismas cantidades el precio si que es el promedio, pero al comprar mas cantidad el precio baja.


1 x 100 = 100
25 x 75 = 1875
--- ---------
26 1.975

Tengo 26 productos que me han costado 1.975, divides 1.975 por los 26 articulos y tienes los 75.96, si no me equivoco. Si esta bien


un saludo.
  #4 (permalink)  
Antiguo 04/11/2014, 09:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Calcular campo de promedio

pues seria asi como lo mencionas

(TotaArti / Total)

y asi obtienes lo que necesitas, porque dices que asi no te funciona???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 04/11/2014, 11:49
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Calcular campo de promedio

Hola a todos:

Aqui dejo el codigo.

Código SQL:
Ver original
  1. TRANSFORM SUM(lfc.[Uds Servidas]) AS [El valor]
  2. SELECT lfc.Producto AS Articulo, SUM(lfc.[Uds Servidas]) AS Total, Articulos.Nombre AS NombArti, SUM(lfc.[Importe Neto]) AS TotaArti, (TotaArti / Total) AS PrecMedi
  3. FROM ([Lineas Facturacion Compras] AS lfc
  4.     INNER JOIN [Cabecera Facturacion Compras] AS cfc ON (lfc.Serie = cfc.Serie) AND  (lfc.Numero = cfc.Numero))
  5. INNER JOIN Articulos ON lfc.Producto = Articulos.Codigo
  6. GROUP BY lfc.Producto, Articulos.Nombre
  7. ORDER BY Articulos.Nombre
  8. PIVOT format([Fecha], 'mmm') IN ('Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic');
[/PHP]

Un saludo

Última edición por gnzsoloyo; 04/11/2014 a las 12:13 Razón: Código de programación no permitido en foros de BBDD
  #6 (permalink)  
Antiguo 04/11/2014, 12: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: 17 años
Puntos: 2658
Respuesta: Calcular campo de promedio

@ManelGomez:
Por favor, no pongas código de programación en los fors de BBDD. Si lo estás copiando de un codigo programado tómate el trabajo de eliminar todo lo que no sea SQL.
Por otro lado, ya existe el Highlight específico para SQL, no uses el de PHPO porque el resaltado queda completamente erróneo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: calcular, campo, select, siguiente, sql
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 16:13.