Heim >Datenbank >MySQL-Tutorial >Wie kann ich unterschiedliche Werte innerhalb von Partitionen in SQL Server zählen?
Eindeutige Werte über Partitionen mit COUNT() OVER zählen
Überwindung der Herausforderung, unterschiedliche Werte zu zählen, wenn die Partitionsfunktion COUNT() OVER verwendet wird ist ein häufiges Problem in SQL Server. In diesem Artikel wird ein alternativer Ansatz untersucht, um das gewünschte Ergebnis mithilfe einer Kombination aus dense_rank() und arithmetischen Operationen zu erzielen.
Ursprüngliche Abfrage und Fehler
Die ursprüngliche Abfrage versucht zu berechnen eine laufende Summe unterschiedlicher Werte mit COUNT(DISTINCT) OVER:
NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth])
SQL Server generiert jedoch einen fälligen Fehler zur Inkompatibilität von DISTINCT mit Partitionsfunktionen.
Alternative Lösung mit Dense_rank()
Eine praktische Lösung für dieses Problem ist die Verwendung der Funktion dense_rank() in Verbindung mit einfache arithmetische Operationen:
dense_rank() over (partition by [Mth] order by [UserAccountKey]) + dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) - 1
Dieser Ausdruck berechnet die laufende Summe unterschiedlicher Werte innerhalb jedes Monats. So funktioniert es:
Das obige ist der detaillierte Inhalt vonWie kann ich unterschiedliche Werte innerhalb von Partitionen in SQL Server zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!