Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/07/2015, 06:40
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Fallo de funcion DATEADD

Cita:
Me da el tipico error: "Ha intentado ejecutar una consulta que no incluye la expresion especificada 'fecha' como parte de una funcion de agregado"
Excepto en MySQL, todos los DBMS exigen que todas y cada una de las columnas indicadas en el SELECT, que no estén afectadas por el uso de funciones agregadas, se encuentren listadas en el GROUP BY.
El problema que le veo a tu sentencia:
Código SQL:
Ver original
  1. SELECT
  2.     a.punvenid,
  3.     YEAR(a.fecha) AS Año,
  4.     MONTH(a.fecha) AS Mes,
  5.     COUNT(a.ingbru) AS NumRegs,
  6.     SUM(a.ingbru) AS SumIng,
  7.     Avg(a.ingbru) AS PromIng,
  8.     SUM(a.ingbru)-
  9.                 (SELECT SUM(b.ingbru)
  10.                 FROM ingdet b
  11.                 WHERE YEAR(b.fecha)= YEAR(DATEADD("m",-1,a.fecha))
  12.                     AND MONTH(b.fecha)= MONTH(DATEADD("m",-1,a.fecha))
  13.                     AND b.punvenid=a.punvenid
  14.                 ) AS difant
  15. FROM ingdet AS a
  16. GROUP BY a.punvenid, YEAR(a.fecha), MONTH(a.fecha)
  17. ORDER BY a.punvenid, YEAR(a.fecha) DESC , MONTH(a.fecha) DESC;

Es esta parte, que no es una función de agregación:

Código SQL:
Ver original
  1. (SELECT SUM(b.ingbru)
  2. FROM ingdet b
  3. WHERE YEAR(b.fecha)= YEAR(DATEADD("m",-1,a.fecha))
  4.                     AND MONTH(b.fecha)= MONTH(DATEADD("m",-1,a.fecha))
  5.                     AND b.punvenid=a.punvenid
  6. ) AS difant
La función de agregación es interna, pero a los efectos del SELECT principal, no es una columna agrupada.

Me parece que toda la lógica de tu consulta debe ser replanteada. Así como la intentas hacer no va a funcionar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)