Como usar la función iif en una consulta sql

Alguien me ayude por favor con este código:Sql = "SELECT P.CODIGO,P.ARTICULO,ID_P, IIF(CANT_ENTRADAS="",0,sum(CANT_ENTRADAS))AS ENTRADAS,IIF(CANT_SALIDAS="",0,sum(CANT_SALIDAS))" & _"AS SALIDAS FROM [PRODUCTOS$] P INNER JOIN [MOV_ENTRADAS$] M ON P.ID=M.ID_P GROUP BY P.CODIGO,P.ARTICULO,ID_P"Rs.Open Sql, Cnn, 1, 1Con esto pretendo sumar las cantidades de la columna entrada igualmente de las salidas por productos pero en el caso que en alguna de las columnas hayan campos nulos se rellenen con ceros(0) para luego hacer operaciiones matemáticas entre las 2 columnas anteriormente ya mencionadas, un saludo para todos y muchas gracias cabe resaltar que este código es ejecutado desde excel, use sentencias select case pero no me sirvió da error, use algo así :select case when CANT_ENTRADAS="" then 0 else sum(CANT_ENTRADAS) end from [mov_entradas$] pero da error,a mi parecer no se puede ejecutar esta sentencia desde excel

s

1 respuesta

Respuesta
2

Lo primero a tener en cuenta es que no es lo mismo un valor nulo que una cadena vacía (""), y la forma te manejarlos es diferente.

Si la base de datos a la que te conectas es Access, para gestionar los nulos es más práctico usar la función Nz() que un IIF, por ejemplo:

... Sum(Nz(CANT_ENTRADAS, 0))) AS ENTRADAS, sum(Nz(CANT_SALIDAS, 0))) AS SALIDAS FROM ...

Aunque también lo puedes hacer con IIF, si quieres, pero no comparando el valor nulo con una cadena vacía, sino comprobando si es o no nulo, pero en mi opinión deberías cambiar el orden de las funciones IIF y Sum:

... Sum(IIF(CANT_ENTRADAS IS NULL, 0, CANT_ENTRADAS)) AS ENTRADAS, sum(IIF(CANT_SALIDAS IS NULL, 0, CANT_SALIDAS)) AS SALIDAS FROM ...

Si trabajas contra una base de datos en SQL Server, no tienes tienes disponible la función Nz, pero sí tienes la función COALESCE, que funcionaría igual.

¡Gracias! Estoy trabajando desde excel usando sql, luego que funcione todo migrare la base de datos, use su sugerencia y no me funciono me sigue arronjando error aquí la foto

Y aquí el archivo para mayor comprensión, un saludo y gracias por la ayusa que pueda aportar

https://drive.google.com/open?id=1I9JX8BXcM954atTBc_GRbrNAAQlfNsKj 

Parece que no has leído del todo bien mi respuesta, porque yo te digo:

Pero en mi opinión deberías cambiar el orden de las funciones IIF y Sum:

... Sum(IIF(CANT_ENTRADAS IS NULL, 0, CANT_ENTRADAS)) AS ENTRADAS, sum(IIF(CANT_SALIDAS IS NULL, 0, CANT_SALIDAS)) AS SALIDAS FROM ...

Y tu sigues probando la sintaxis inicial...

¡Gracias! 10000000000000000000000 ∞ así quedo la cosa creo que el tema esta resuelto

y este es el resultado

un saludo mi estimado...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas