Conteo Condicional en SQL Server
Conteo Condicional en SQL Server
Recientemente he tenido la necesidad de hacer un conteo de datos condicional
en SQL Server, lo que en Excel es un CONTAR.SI, aprovechando la ocasión decidí documentar con ejemplo la tarea, para futuras oportunidades Suponiendo contamos con una tabla llamada ProductList, con los datos
que se muestran en la imagen de abajo y necesitamos contar los productos mayores a 0 de la categoría “Condiments”.Pues bien antes de realizar el conteo debemos tener en cuenta que la función COUNT() de SQL Server si la usamos como COUNT(*) contara todas las filas, por ejemplo
Y si lo que contamos es un campo de la tabla por ejemplo
COUNT(UNITPRICE), como en el ejemplo UNITPRICE tiene valores nulos en productos de la categoría “Seafood” estos no los contara.
Ahora como lo que necesitamos es contar los productos mayores que 0
de la categoría “Condiments”, si volviéramos Nulos los valores en 0 no los contaría, para esto usaremos la instrucción CASE
Finalmente usamos, nuevamente la función COUNT, pero esta vez
encerrando la función CASE creada.
Fuente de apoyo para la intruccion CASE
|
Suponiendo que tenemos una tabla empleados seria algo así como esto, vamos a crear con “Case” una columna que coloque 1 si esta contratado y nulo si no esta contratado:
Select NombreEmpleado, EstadoEmpleado, FechaIngreso
(CASE EstadoEmpleado
WHEN ‘Contratado’ THEN
1 ELSE Null END) as Estado
from Empleados
where Fecha Ingreso between ’01/01/2013′ and ’11/7/2013′
Ahora lo que asemos es que encerramos toda la instrucción CASE dentro de una Función COUNT para contar todos los Unos , teniendo en cuenta que la función “Count” no cuenta los nulos:
Select
COUNT((CASE EstadoEmpleado
WHEN ‘Contratado’ THEN
1 ELSE Null END)) as TotalContratados
from Empleados
where Fecha Ingreso between ’01/01/2013′ and ’11/7/2013′
De antemano muchas gracias Doctor por su gran ayuda. Este problema mas bien esta duda no me dejo dormir tranquilo buen tiempo. Que seriamos sin los foros :3
Man todo bien y estupendo pero ahora el problema seria que se han creado dos nuevos campos como muestra la imagen y quiero restar esos dos campos pero que no pertenecen a ninguna tabla.
Te mando el link de la imagen :
https://www.dropbox.com/s/ae2rgbfkks0ugov/ConteoSql3.JPG
Muchas gracias por tu apoyo y por compartir tus conocimientos conmigo.
Lo único que tienes crear un campo calculado donde se reste estos campos de dejo el ejemplo:
Select DATENAME (month, (F_RecepBE)) as MEs, F_RecepBE as Fecha,
count (Idest) as ‘QPEdidos’,
count ((Case IdEst when’003′ Then 1 Else Null End)) as ‘Instalado’,
(count (Idest))-(count ((Case IdEst when ‘003’ Then 1 Else Null End))) as ‘Pendientes’
from Comercio
group by F_RecepBe, IdEst
Lo acabo de probar y funciono de maravillas, gracias mi estimado. Se agradede la colaboracion de todos. Apenas me llegue una informacion con gusto lo compartire con ustedes.
Donde estan mis comentarios anteriores? ¿ Los borraron ?