Contar campos horizontalmente en sql

Ojalá me puedan ayudar con la sgte consulta

Tengo una tabla con varios campos entre los cuales celular1, celular2 hasta celular 5, no todos los registros tienen los 5 celulares.

Entonces deseo poner otro campo «cantidad_celulares» donde me ponga la cantidad de celulares por cada registro, es decir, si el registro 1 tiene 3 celulares que me ponga en el campo creado 3

2 respuestas

Respuesta
3

Dependiendo de la versión de SQLServer que utilices puedes usar IIF (desde la versión 2012) o Case (en versiones anteriores).

Con Case la consulta te quedaría algo así:

SELECT ID, nombre, (CASE WHEN celular1 IS NULL THEN 0 ELSE 1 END) + (CASE WHEN celular2 IS NULL THEN 0 ELSE 1 END) 
+ (CASE WHEN celular3 IS NULL THEN 0 ELSE 1 END) + (CASE WHEN celular4 IS NULL THEN 0 ELSE 1 END) + (CASE WHEN celular5 IS NULL THEN 0 ELSE 1 END) 
AS Cuenta
FROM dbo.[TuTabla]
ORDER BY ID

Y con IIF, algo como esto, de forma similar a cómo sería en Access:

SELECT ID, nombre, IIF(celular1 IS NULL,0,1) + IIF(celular2 IS NULL,0,1) 
+ IIF(celular3 IS NULL,0,1) + IIF(celular4 IS NULL,0,1) + IIF(celular5 IS NULL,0,1) 
AS Cuenta
FROM dbo.[TuTabla]
ORDER BY ID

¡Gracias!

Uso sql 2008 y me funciono bien, yo lo había hecho con un count pero tenia el problema que al hacer el group by no me agrupaba los nulos y me salia menos registros, con tu consulta resulto excelente, gracias!

Respuesta
2

Una forma sería con case:

SELECT case when celular1 is null then 0 else 1 end +

              case when celular2 is null then 0 else 1 end +

             case when celular3 is null then 0 else 1 end +

             case when celular4 is null then 0 else 1 end +

             case when celular5 is null then 0 else 1 end 

FROM tabla

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas