2012-06-24 254 views
0

我在我的數據庫中有4個主要的表。SQL Server 2008中的複雜SQL查詢

  1. 季節 - > seasonID
  2. 試驗 - > trialID
  3. 比賽 - > CID,名
  4. 營 - > campID,DivisionID(FK)
  5. 部門---> DivisionID
  6. 參賽者---> ContestantID

現在選手屬於/是一個部門的成員。

然後一個部門屬於一個陣營。

所有這些都會導致我的績效表。

性能表

SeasonID|TrialID|CampID|DivID|CompetionID|CtestantID|Score1 |Score2 |Total 
1   1  1 1  1   1   20  20  40 
1   1  1 1  2   1   20  15  30 
1   2  1 1  1   2   10  5  15 
1   2  1 1  2   2   5  5  10 
1   2  1 1  1   1   10  30  40 
1   2  1 1  2   1   20  10  30 

我如何可以查詢此性能表給我比賽的名字,總得分和排名每個參賽者的每場比賽的試驗和季節(在總成績排名) ?

例子:

在季節1和試驗2我想有:

SeasonID| TrialID | ContestantID| Competition | TotalScore | Rank 
    1   2   1   1   40   1 
    1   2   2   1   15   2 
    1   2   1   2   30   1 
    1   2   2   2   10   2 

我怎麼去呢?我已經嘗試過表格變量,數據透視表和連接,但是我只能通過比賽排名,但我不知道如何彙總結果以獲得上述結果!

+1

*我在我的數據庫4個大表.. 。1,2,3,... 6 * –

+0

@ ta.speot.is:現在人們不必數數,他們有計算機。 :) –

+0

yea ... tnx ...猜我們得到如此懶惰@次 – froodo

回答

0

我不完全確定你是如何計算出你想要的結果的。我想這是你所追求的,但是,如果是這樣,在你的問題中理想的效果TotalScore應該是10的最後一個記錄,而不是20

SELECT SeasonID, TrialID, ContestantID, CompetitionID, Total, 
    DENSE_RANK() OVER(PARTITION BY CompetitionId ORDER BY Total DESC) AS [Rank] 
FROM PerformanceTable 
+0

是的...你是對的...最後一張唱片的總分是10 ..只是改變了它.. – froodo

+0

所以...它解決了你的問題嗎? –