2017-05-15 6 views
1

Il est probablement le cas, mais je suis un peu nouveau sur SQL Server. J'ai besoin de classer/denserank un ensemble de données, mais le classement est basé sur 6 colonnes. Ce que j'ai en ce moment est:Rang de plusieurs colonnes dans SQL Server

SELECT col1, col2, col3, col4, col5, col6, col7, 
    RANK() OVER(ORDER BY col2 desc) as APPLICANT_RANK 
FROM myTable 

Alors que fonctionne très bien, mais s'il y a une égalité dans col2, je reçois deux dossiers classés même. Ce que je veux est de savoir s'il y a un lien dans col2, pour voir le plus grand nombre dans col3, puis col4, si la ligne au col 6.

Merci

+1

Veuillez partager quelques exemples de ce que vous essayez d'obtenir. l'entrée et la sortie désirée –

+0

@Looking_for_answers qu'est-ce qui n'est pas clair sur cette question? Les exemples, les entrées et les sorties sont bons * si nécessaire pour comprendre le problème *. –

Répondre

2

Vous pouvez inclure plusieurs colonnes dans la clause order by dans la fonction de classement, tout comme vous le feriez lors de la commande des résultats d'une requête entière:

RANK() OVER(
    ORDER BY col2 desc,col3 desc, col4 desc, col5 desc, col6 desc 
) as APPLICANT_RANK 
+0

Merci pour cette suggestion, cela a bien fonctionné. J'ai également trouvé que je pouvais échanger ce Rank avec ROW_Number et obtenir le même résultat. – NYBrummie

+1

@NYBrummie. . . Ils ne produisent que le même résultat si vous n'avez jamais de doublons au-dessus des colonnes de taille. –