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 originalSELECT
a.punvenid,
YEAR(a.fecha) AS Año,
MONTH(a.fecha) AS Mes,
COUNT(a.ingbru) AS NumRegs,
SUM(a.ingbru) AS SumIng,
Avg(a.ingbru) AS PromIng,
SUM(a.ingbru)-
(SELECT SUM(b.ingbru)
FROM ingdet b
WHERE YEAR(b.fecha)= YEAR(DATEADD("m",-1,a.fecha))
AND MONTH(b.fecha)= MONTH(DATEADD("m",-1,a.fecha))
AND b.punvenid=a.punvenid
) AS difant
FROM ingdet AS a
GROUP BY a.punvenid, YEAR(a.fecha), MONTH(a.fecha)
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(SELECT SUM(b.ingbru)
FROM ingdet b
WHERE YEAR(b.fecha)= YEAR(DATEADD("m",-1,a.fecha))
AND MONTH(b.fecha)= MONTH(DATEADD("m",-1,a.fecha))
AND b.punvenid=a.punvenid
) 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.