Réglage de rang à NULL à l'aide de RANK() OVER en SQL
Dans une DB SQL Server, j'ai une table de valeurs que je me suis intéressé dans le classement.
Lorsque j'effectue un RANK() OVER (ORDER BY DESC) que le RANG, j'obtiens les résultats suivants (dans un tableau hypothétique):
RANK | USER_ID | VALUE
------------------------
1 | 33 | 30000
2 | 10 | 20000
3 | 45 | 10000
4 | 12 | 5000
5 | 43 | 2000
6 | 32 | NULL
6 | 13 | NULL
6 | 19 | NULL
6 | 28 | NULL
Le problème est, je ne veux pas les lignes qui ont la valeur NULL pour une VALEUR pour obtenir le grade - je besoin d'une certaine manière de définir le rang de ces valeurs NULL. Jusqu'à présent, la recherche sur le web m'a apporté aucune réponse sur comment je pourrais être capable de faire cela.
Merci pour toute aide que vous pouvez fournir.
OriginalL'auteur Tom Schneider | 2010-09-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer une instruction de CAS:
OriginalL'auteur Mark Byers
Le CAS déclaration prévue plus tôt compter les enregistrements NULL dans le rang si le TRI PAR ordre croissant plutôt que de descendre. Ce serait le classement à 5 au lieu de 1 - probablement pas ce qui est souhaité.
Pour s'assurer que les valeurs null ne sont pas comptabilisés dans le classement, vous pouvez forcer vers le bas par l'ajout d'un premier critère de tri si la valeur EST NULL ou pas, comme suit:
*** crédit d'Hugo Kornelis: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/deb8a0aa-aaab-442b-a667-11220333a4e0/rank-without-counting-null-values?forum=transactsql
OriginalL'auteur Nathaniel Ramm