Comment combiner GROUPE PAR et ROW_NUMBER?

J'espère exemple de code suivant est auto-explicatif:

declare @t1 table (ID int,Price money, Name varchar(10))
declare @t2 table (ID int,Orders int,  Name varchar(10))
declare @relation  table (t1ID int,t2ID int)
insert into @t1 values(1, 200, 'AAA');
insert into @t1 values(2, 150, 'BBB');
insert into @t1 values(3, 100, 'CCC');
insert into @t2 values(1,25,'aaa');
insert into @t2 values(2,35,'bbb');
insert into @relation values(1,1);
insert into @relation values(2,1);
insert into @relation values(3,2);

select T2.ID AS T2ID
,T2.Name as T2Name
,T2.Orders
,T1.ID AS T1ID
,T1.Name As T1Name
,T1Sum.Price
FROM @t2 T2
INNER JOIN (
    SELECT Rel.t2ID
        ,MAX(Rel.t1ID)AS t1ID 
-- the MAX returns an arbitrary ID, what i need is: 
--      ,ROW_NUMBER()OVER(Partition By Rel.t2ID Order By Price DESC)As PriceList
        ,SUM(Price)AS Price
        FROM @t1 T1 
        INNER JOIN @relation Rel ON Rel.t1ID=T1.ID
        GROUP BY Rel.t2ID
)AS T1Sum ON  T1Sum.t2ID = T2.ID
INNER JOIN @t1 T1 ON T1Sum.t1ID=T1.ID

Résultat:

T2ID   T2Name   Orders  T1ID    T1Name  Price     
 1      aaa       25     2       BBB    350,00     
 2      bbb       35     3       CCC    100,00

Ce dont j'ai besoin est commenté ci-dessus, un moyen d'obtenir le ROW_NUMBER mais aussi à Group By en premier lieu. J'ai donc besoin de la sum de tous les T1-prix regroupées par T2.ID dans la relation-table et dans la requête externe de la t1ID avec le prix le plus élevé.

En d'autres termes: Comment faire pour modifier MAX(Rel.t1ID)AS t1ID à un peu de retourner l'ID avec le prix le plus élevé?

De sorte que le résultat souhaité est(notez que tout d'abord T1ID changé de 2 à 1, puisqu'il a le prix le plus élevé):

T2ID   T2Name   Orders  T1ID    T1Name  Price     
 1      aaa       25     1       AAA    350,00     
 2      bbb       35     3       CCC    100,00

Note: dans le cas où vous vous demandez pourquoi je ne multipliez pas Orders avec les Prix: ils ne sont pas liée(donc je devrais avoir laissé cette colonne, car il est un peu ambigu, veuillez l'ignorer, j'ai juste ajouté ça à faire tous les moins abstraite). En fait Orders doit rester inchangé, c'est la raison pour laquelle la sous-requête approche à joindre les deux et la raison pour laquelle j'ai besoin de group by dans la première place.

Conclusion: évidemment, le cœur de ma question peut être répondu par la SUR l'article qui peut être appliquée à tout fonction d'agrégation comme SUM(voir Damien réponse) ce qui était nouveau pour moi. Merci à tous pour vos méthodes de travail.

  • Ne pourrait-il pas être AAA dans le résultat final, au lieu de BBB?