Principales respuestas
Error al Sumar al SQL Ayuda Urgente Gracias

Pregunta
-
Buenos dias.
Mi tengo un problema y quería saber si son amable en ayudarme por favor pues verán el problema es el siguiente
tengo un procedimiento que me suma el total de unas cuenta pero hay unas cuentas que no me suma le pongo el procedimiento y lo que me arroja
ALTER PROCEDURE [dbo].[comprobanteCajaChica]
--@Nosol NVARCHAR(20),
@fecha_ini DATE,
@fecha_fin DATE
as
SELECT
--cc.NoSol,
cf.cuenta,
cf.DesCta,
cf.Debe,
SUM( cf.Haber) haber
FROM
CCH_FACTURADETALLES AS cf
INNER JOIN CCH_COMPROB AS cc ON cc.NO_COMP = cf.NO_COMP
WHERE cc.F_COMPRO BETWEEN @Fecha_ini AND @Fecha_fin AND (SUBSTRING(cf.cuenta,1,4)='2109'AND cf.Haber>0) OR (SUBSTRING(cf.Cuenta,1,4)='6104'AND cf.Haber>0)
group BY
--cc.NoSol,
cf.cuenta,
cf.DesCta,
cf.Debe
UNION ALL
SELECT
--cc.NoSol,
cf.cuenta,
cf.DesCta,
cf.Debe,
cf.Haber haber
FROM
CCH_FACTURADETALLES AS cf
INNER JOIN CCH_COMPROB AS cc ON cc.NO_COMP = cf.NO_COMP
WHERE cc.F_COMPRO BETWEEN @Fecha_ini AND @Fecha_fin AND cf.Debe>0Como verán la cuenta 6104 me duplica donde en realidad me debería sumar
Gracias espero atentamente su repuesta gracias
Respuestas
-
¿Has intentado quitar de la lista de agrupación la columna 'Debe'?
ALTER PROCEDURE [dbo].[comprobanteCajaChica] @fecha_ini date, @fecha_fin date AS BEGIN SELECT cf.cuenta, cf.DesCta, 0 AS 'DEBE', SUM(cf.Haber) AS 'HABER' FROM CCH_FACTURADETALLES AS cf INNER JOIN CCH_COMPROB AS cc ON cc.NO_COMP = cf.NO_COMP WHERE cc.F_COMPRO BETWEEN @Fecha_ini AND @Fecha_fin AND SUBSTRING(cf.cuenta,1,4) IN ('2109', '6104') AND cf.Haber > 0 GROUP BY cf.cuenta, cf.DesCta UNION ALL SELECT cf.cuenta, cf.DesCta, cf.Debe, 0 AS 'HABER' FROM CCH_FACTURADETALLES AS cf INNER JOIN CCH_COMPROB AS cc ON cc.NO_COMP = cf.NO_COMP WHERE cc.F_COMPRO BETWEEN @Fecha_ini AND @Fecha_fin AND cf.Debe > 0 END
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta DOSA_INFORMATICA jueves, 22 de septiembre de 2016 20:00
Todas las respuestas
-
¿Has intentado quitar de la lista de agrupación la columna 'Debe'?
ALTER PROCEDURE [dbo].[comprobanteCajaChica] @fecha_ini date, @fecha_fin date AS BEGIN SELECT cf.cuenta, cf.DesCta, 0 AS 'DEBE', SUM(cf.Haber) AS 'HABER' FROM CCH_FACTURADETALLES AS cf INNER JOIN CCH_COMPROB AS cc ON cc.NO_COMP = cf.NO_COMP WHERE cc.F_COMPRO BETWEEN @Fecha_ini AND @Fecha_fin AND SUBSTRING(cf.cuenta,1,4) IN ('2109', '6104') AND cf.Haber > 0 GROUP BY cf.cuenta, cf.DesCta UNION ALL SELECT cf.cuenta, cf.DesCta, cf.Debe, 0 AS 'HABER' FROM CCH_FACTURADETALLES AS cf INNER JOIN CCH_COMPROB AS cc ON cc.NO_COMP = cf.NO_COMP WHERE cc.F_COMPRO BETWEEN @Fecha_ini AND @Fecha_fin AND cf.Debe > 0 END
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta DOSA_INFORMATICA jueves, 22 de septiembre de 2016 20:00
-
Estas haciendo un UNION ALL, por lo que si esa cuenta esta en ambos conjuntos entonces aparecera dos veces. Deberas volver a agrupar/agregar la union de los dos conjuntos.
AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas