Problem adding SUM () in query
I have this SQL Query but when wanting to add a SUM
to column CANT_DISPONIBLE
it throws me error, this is my query
select EB.ARTICULO,EB.BODEGA,EB.CANT_DISPONIBLE,EB.CANT_RESERVADA
,EB.CANT_TRANSITO,EB.CANT_REMITIDA,SUM(EB.CANT_DISPONIBLE) X
from EXISTENCIA_BODEGA EB,ARTICULO CL
where
EB.ARTICULO=CL.ARTICULO AND
(EB.CANT_DISPONIBLE>0 or EB.CANT_REMITIDA>0 or
EB.CANT_TRANSITO>0 or EB.CANT_RESERVADA>0)
and (SUBSTRING(EB.BODEGA,1,1)='T'
OR SUBSTRING(EB.BODEGA,1,2)='VM'
OR SUBSTRING(EB.BODEGA,1,2)='CS')
and SUBSTRING(EB.BODEGA,1,2)<>'TA'
AND CL.CLASIFICACION_1 IN ('1010','1007')
order by EB.BODEGA
The error is for:
Group By: Column 'EXISTENCIA_BODEGA.ARTICULO'
is invalid in the select list because it is not contained
in either an aggregate function or the GROUP BY clause.
2
Author: Black Sheep, 2016-05-16
2 answers
When you use an aggregate function (such as SUM) in an SQL the fields in the SELECT that are not included in aggregate functions must be specified in the group by clause.
The correctness of your query depends on what you want to get.
For example if you want to get the sums of the quantities for each item and warehouse:
SELECT EB.ARTICULO, EB.BODEGA,
SUM(EB.CANT_DISPONIBLE),SUM(EB.CANT_RESERVADA),
SUM(EB.CANT_TRANSITO), SUM(EB.CANT_REMITIDA),
SUM(EB.CANT_DISPONIBLE) X
FROM EXISTENCIA_BODEGA EB, ARTICULO CL
WHERE
EB.ARTICULO=CL.ARTICULO AND
(EB.CANT_DISPONIBLE>0 OR EB.CANT_REMITIDA>0 OR
EB.CANT_TRANSITO>0 OR EB.CANT_RESERVADA>0)
AND (SUBSTRING(EB.BODEGA,1,1)='T'
OR SUBSTRING(EB.BODEGA,1,2)='VM'
OR SUBSTRING(EB.BODEGA,1,2)='CS')
AND SUBSTRING(EB.BODEGA,1,2)<>'TA'
AND CL.CLASIFICACION_1 IN ('1010','1007')
GROUP BY EB.ARTICULO, EB.BODEGA
ORDER BY EB.BODEGA
2
Author: Asier Villanueva, 2016-05-16 18:53:43
As I said, You only need to add the clause group by
(as indicated by the error strace) since you have added the function sum
in particular your query should look like this
SELECT EB.ARTICULO,
EB.BODEGA,
EB.CANT_DISPONIBLE,
EB.CANT_RESERVADA ,
EB.CANT_TRANSITO,
EB.CANT_REMITIDA,
SUM(EB.CANT_DISPONIBLE) X
FROM EXISTENCIA_BODEGA EB, ARTICULO CL
WHERE EB.ARTICULO = CL.ARTICULO
AND (EB.CANT_DISPONIBLE > 0
OR EB.CANT_REMITIDA > 0
OR EB.CANT_TRANSITO > 0
OR EB.CANT_RESERVADA > 0)
AND (SUBSTRING(EB.BODEGA,1,1) = 'T'
OR SUBSTRING(EB.BODEGA,1,2) = 'VM'
OR SUBSTRING(EB.BODEGA,1,2) = 'CS')
AND SUBSTRING(EB.BODEGA,1,2) <> 'TA'
AND CL.CLASIFICACION_1 IN ('1010','1007')
GROUP BY EB.ARTICULO,
EB.BODEGA,
EB.CANT_DISPONIBLE,
EB.CANT_RESERVADA ,
EB.CANT_TRANSITO,
EB.CANT_REMITIDA
ORDER BY EB.BODEGA;
1
Author: Rosendo Ropher, 2016-05-16 19:02:03