Bonjour,
Je souhaites effectuer la sum de 20 colonnes et n'afficher que celle qui ont les 10 plus grande valeur, est-ce possible , pouvez-vous m'aiguiller.
Merci.
Cordialement.
Version imprimable
Bonjour,
Je souhaites effectuer la sum de 20 colonnes et n'afficher que celle qui ont les 10 plus grande valeur, est-ce possible , pouvez-vous m'aiguiller.
Merci.
Cordialement.
Quelque chose dans ce goût-là.Code:
1
2
3
4
5
6
7
8
9
10 ; WITH SR1 AS ( SELECT Id, col1, col2, col_A + col_B + col_C + col_D as Total FROM dbo.MaTable ) , SR2 AS ( SELECT Id, col1, col2, Total , ROW_NUMBER() OVER(ORDER BY Total DESC ) AS RowID_TotalOrderDesc FROM SR1 ) SELECT Id, col1, col2, Total , RowID_TotalOrderDesc from SR2 where RowID_TotalOrderDesc >=10
Doit y avoir plus simple mais ça fait la job.
Euh...
Pourquoi pas un simple TOP 10 avec un order by ?
Code:
1
2
3
4 SELECT top 10 Id, col1, col2, col_A + col_B + col_C + col_D as Total FROM dbo.MaTable order by total desc
Merci pour votre aide
J'ajoute mon petit grain de sel, car "il me semble" qu'en cas d'ex-aequo les deux solutions ne donnent pas le même résultat.
Si les 5 premières lignes renvoient la même valeur, faut-il renvoyer 10 lignes, ou 14 ?
Tatayo.
Hmmmm ROW_NUMBER() donne des nombres différents en cas d'ex aequo dans la clause ORDER BY du moment qu'on n'a pas de partitionnement, non ? (contrairement à RANK() et DENSE_RANK())
C'est d'ailleurs pour cette raison que ROW_NUMBER() n'est pas déterministe et que deux exécutions successives de la même requête peuvent donner des résultats différents.
Effectivement, je viens de demander à RTFM, et il n'y a pas de doublons dans la numérotation avec ROW_NUMBER.
Mais je maintiens quand même ma question (moi têtu ? non, si peu :aie:) Bgrinch veut "les lignes qui ont les 10 plus grandes valeurs", et non les 10 premières lignes. Donc en cas d'ex-aequo, pour moi il faut renvoyer plus de 10 lignes, et donc utiliser la méthode de 7gyY9w1ZY6ySRgPeaefZ mais avec un DENSE_RANK.
Tatayo.
Bonsoir,
Il me semble que TOP 10 WITH TIES renverra 14 lignes ...