sql >> Base de Datos >  >> RDS >> Sqlserver

Funciones de ventana para contar registros distintos

Encontré esta pregunta en busca de una solución a mi problema de contar valores distintos. Al buscar una respuesta, encontré esta publicación . Ver último comentario. Lo probé y usé el SQL. Funciona muy bien para mí y pensé que proporcionaría otra solución aquí.

En resumen, usando DENSE_RANK() , con PARTITION BY las columnas agrupadas y ORDER BY ambos ASC y DESC en las columnas a contar:

DENSE_RANK() OVER (PARTITION BY drugClass ORDER BY drugName ASC) +
DENSE_RANK() OVER (PARTITION BY drugClass ORDER BY drugName DESC) - 1 AS drugCountsInFamilies

Lo uso como plantilla para mí.

DENSE_RANK() OVER (PARTITION BY PartitionByFields ORDER BY OrderByFields ASC ) +
DENSE_RANK() OVER (PARTITION BY PartitionByFields ORDER BY OrderByFields DESC) - 1 AS DistinctCount

¡Espero que esto ayude!