0

データベースに 4 つの主要なテーブルがあります。

  1. シーズン --> シーズン ID
  2. トライアル --> トライアルID
  3. コンペティション --> CID、名前
  4. キャンプ --> キャンプID,ディビジョンID(FK)
  5. 部門 ---> 部門 ID
  6. 出場者 --->出場者ID

現在、競技者は部門に所属している/部門のメンバーです。

次に、師団はキャンプに属します。

これはすべて、パフォーマンス テーブルにつながります。

性能表

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

どうすればいいですか?テーブル変数、ピボット、および結合を試しましたが、競争によってのみランク付けできますが、結果を集計して上記の結果を得る方法がわかりません!

4

1 に答える 1

0

希望する結果をどのように計算したか正確にはわかりません。これはあなたが求めているものだと思いますが、もしそうならTotalScore、質問の望ましい結果は、最後のレコードに対して20ではなく10になるはずです。

SELECT SeasonID, TrialID, ContestantID, CompetitionID, Total,
    DENSE_RANK() OVER(PARTITION BY CompetitionId ORDER BY Total DESC) AS [Rank]
FROM PerformanceTable
于 2012-06-24T00:49:58.190 に答える