Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Funzioni della finestra per contare record distinti

Mi sono imbattuto in questa domanda alla ricerca di una soluzione al mio problema di contare valori distinti. Cercando una risposta mi sono imbattuto in questo post . Vedi ultimo commento. L'ho testato e ho usato SQL. Funziona molto bene per me e ho pensato che avrei fornito un'altra soluzione qui.

In sintesi, utilizzando DENSE_RANK() , con PARTITION BY le colonne raggruppate e ORDER BY entrambi ASC e DESC sulle colonne da contare:

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 come modello per me stesso.

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

Spero che questo aiuti!