2012-06-24 205 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

所以...它解决了你的问题吗? –