Tengo una BD Access, de la cual he realizado una consulta (SQL guardada en la BD) que viene de otras Consultas hasta llegar a esta final.
La SQL me trae los datos solicitados, pero necesito agregar una Sumatoria de todos los campos, pero algunos de esos campos de algunos registros son campos vacios o nulos debido a un LEFT JOIN entre dos tablas.
Entonces el SUM() solo funciona si los campos que suma son todos numeros, pero si alguno (o mas de uno) es campo vacio, no se da la Suma. Estructuralmente todos los campos son numerico, pero el LEFT JOIN me deja esos campos vacios (los registros que no esten emparejados con la otra tabla claro).
Intente en el SUM() validar cada campo con CInt() porque con IIF(ISNULL(...)) logre que la SQL me cargara con 0 los nulos. Creo que el SUM(CInt(camp1)+CInt(campo2)+...)) no funciono.
Esta es la SQL hasta el momento sin mas cambios:
Código SQL:
Ver original
SELECT TB1.numempleado, TB1.Nombre, IIF(ISNULL(TB1.cantHoras),0,TB1.cantHoras) AS CantHoras, IIF(ISNULL(TB1.HrsDiurna),0,TB1.HrsDiurna) AS HrsDiur, IIF(ISNULL(TB1.HrsNocturna),0,TB1.HrsNocturna) AS HrsNoct, IIF(ISNULL(TB1.HrsSabado),0,TB1.HrsSabado) AS HrsSab, IIF(ISNULL(TB1.pcf),0,TB1.pcf) AS PCF, IIF(ISNULL(TB1.pcf_ext),0,TB1.pcf_ext) AS PCF_EXT, IIF(ISNULL(TB1.pso_ponny),0,TB1.pso_ponny) AS PSO_PONNY, IIF(ISNULL(TB1.pso_comp),0,TB1.pso_comp) AS PSO_COMP, IIF(ISNULL(TB1.pso_tdc),0,TB1.pso_tdc) AS PSO_TDC, IIF(ISNULL(TB1.desc_comp_ponny),0,TB1.desc_comp_ponny) AS DESC_COMP_PONNY, IIF(ISNULL(TB2.cantidad),0,TB2.cantidad) AS CANTIDAD, SUM(TB1.cantHoras + TB1.HrsDiurna + TB1.HrsNocturna + TB1.HrsSabado + TB1.pcf + TB1.pcf_ext + TB1.pso_ponny + TB1.pso_comp + TB1.pso_tdc + TB1.desc_comp_ponny + TB2.cantidad) AS TOTAL FROM SQL_ASIGNACIONES_SECCION_2 AS TB1 INNER JOIN SQL_ASIGNACIONES_PSOJ_FINAL AS TB2 ON TB1.numempleado = TB2.numempleado GROUP BY TB1.numempleado, TB1.Nombre, TB1.cantHoras, TB1.HrsDiurna, TB1.HrsNocturna, TB1.HrsSabado, TB1.pcf, TB1.pcf_ext, TB1.pso_ponny, TB1.pso_comp, TB1.pso_tdc, TB1.desc_comp_ponny, TB2.cantidad;
Me coloca los campos vacios del LEFT JOIN en 0 pero el ultimo campo, el SUM() sigue sin poderme sumar en caso de encontrarse con un valor que no sea numerico. Repito que todos los campos originalmente son numericos pero el LEFT JOIN me los trae nulos por lo que supongo que no lo toma como un campo numerico desde luego y por ende, no hace la suma, a menos que todos sean numericos, cosa que no es.
Por cierto, el LEFT JOIN esta internamente en una de las Consultas (los FROM no son tablas, sino Consultas), lo comento porque en la SQL no se ve ningun LEFT JOIN sino un INNER JOIN, porque esta uniendo relacionalmente dos Consultas ya hechas previamente.
En resumen, como puedo Sumar varios campos donde algunos son vacios? como puedo hacer que SUM() los lea como numericos, siendo los vacios = 0
y haga la Suma de todos los campos.