Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- WHILE (SELECT COUNT(ID) FROM Match WHERE Processed = 0 AND WinnerTeamID IS NOT NULL) > 0
- BEGIN
- SELECT
- b.[TeamID]
- ,SUM(b.[StageAdjustedTeamRatingPoints]) AS RatingPoints
- ,SUM(b.[StageAdjustedGamePoints]) AS GamePoints
- INTO #Temp2
- FROM (SELECT
- z.[TeamID]
- ,z.[SeasonID]
- ,z.[StageID]
- ,z.[MatchID]
- ,z.[TeamRatingPoints]
- ,CASE
- WHEN z.[StageID] = s.[ID] OR z.[StageID] = s.[Stage100ID] THEN 1
- WHEN z.[StageID] = s.[Stage75ID] THEN 2/3
- WHEN z.[StageID] = s.[Stage50ID] THEN 1/3
- WHEN z.[StageID] = s.[Stage25ID] THEN 0
- ELSE 0
- END * z.[TeamRatingPoints] AS [StageAdjustedTeamRatingPoints]
- ,z.[GamePoints]
- ,CASE
- WHEN z.[StageID] = s.[ID] OR z.[StageID] = s.[Stage100ID] THEN 1
- WHEN z.[StageID] = s.[Stage75ID] THEN 2/3
- WHEN z.[StageID] = s.[Stage50ID] THEN 1/3
- WHEN z.[StageID] = s.[Stage25ID] THEN 0.25
- ELSE 0
- END * z.[GamePoints] AS [StageAdjustedGamePoints]
- FROM (SELECT
- TOP 1 *
- FROM Match
- WHERE Processed = 0
- AND WinnerTeamID IS NOT NULL
- ORDER BY ID ASC) AS a
- LEFT JOIN ((SELECT
- m.[ID] AS MatchID
- ,m.[AwayTeamID] AS TeamID
- ,m.[SeasonID]
- ,m.[StageID]
- ,m.[AwayRatingPoints] AS TeamRatingPoints
- ,m.[GamePoints]
- FROM Match AS m
- WHERE m.Processed = 1
- AND m.WinnerTeamID IS NOT NULL)
- UNION
- (SELECT
- m.[ID] AS MatchID
- ,m.[HomeTeamID] AS TeamID
- ,m.[SeasonID]
- ,m.[StageID]
- ,m.[HomeRatingPoints] AS TeamRatingPoints
- ,m.[GamePoints]
- FROM Match AS m
- WHERE m.Processed = 1
- AND m.WinnerTeamID IS NOT NULL)) AS z ON z.[MatchID] < a.[ID]
- AND (z.[TeamID] = a.[AwayTeamID]
- OR z.[TeamID] = a.[HomeTeamID])
- LEFT JOIN Stage AS s ON s.[ID] = a.[StageID]) AS b
- GROUP BY b.[TeamID]
- SELECT
- h.[MatchID]
- ,h.[AwayTeamPoints] + h.[HomeTeamPoints] AS GamePoints
- ,h.[AwayTeamID]
- ,h.[AwayTeamPoints]
- ,h.[AwayRatingPointTotal] / h.[AwayGamePointTotal] AS AwayRating
- ,h.[AwayMod]
- ,CASE
- WHEN h.[AwayMod] = 50 THEN
- (h.[AwayTeamPoints] * (CASE WHEN h.[HomeRatingPointTotal] = 0 THEN 100 ELSE (h.[HomeRatingPointTotal] / h.[HomeGamePointTotal]) END + 50))
- + (h.[HomeTeamPoints] * (CASE WHEN h.[HomeRatingPointTotal] = 0 THEN 100 ELSE (h.[HomeRatingPointTotal]/h.[HomeGamePointTotal]) END - 50))
- ELSE (h.[AwayTeamPoints] * (CASE WHEN h.[AwayRatingPointTotal] = 0 THEN 100 ELSE (h.[AwayRatingPointTotal] / h.[AwayGamePointTotal]) END + h.[AwayMod]))
- + (h.[HomeTeamPoints] * (CASE WHEN h.[AwayRatingPointTotal] = 0 THEN 100 ELSE (h.[AwayRatingPointTotal] / h.[AwayGamePointTotal]) END - h.[HomeMod]))
- END AS AwayRatingPoints
- ,h.[HomeTeamID]
- ,h.[HomeTeamPoints]
- ,h.[HomeRatingPointTotal]
- ,h.[HomeGamePointTotal]
- ,h.[HomeRatingPointTotal] / h.[HomeGamePointTotal] AS HomeRating
- ,h.[HomeMod]
- ,CASE
- WHEN h.[HomeMod] = 50 THEN
- (h.[HomeTeamPoints] * (CASE WHEN h.[AwayRatingPointTotal] = 0 THEN 100 ELSE (h.[AwayRatingPointTotal] / h.[AwayGamePointTotal]) END + 50))
- + (h.[AwayTeamPoints] * (CASE WHEN h.[AwayRatingPointTotal] = 0 THEN 100 ELSE (h.[AwayRatingPointTotal]/h.[AwayGamePointTotal]) END - 50))
- ELSE (h.[HomeTeamPoints] * (CASE WHEN h.[HomeRatingPointTotal] = 0 THEN 100 ELSE (h.[HomeRatingPointTotal] / h.[HomeGamePointTotal]) END + h.[HomeMod]))
- + (h.[AwayTeamPoints] * (CASE WHEN h.[HomeRatingPointTotal] = 0 THEN 100 ELSE (h.[HomeRatingPointTotal] / h.[HomeGamePointTotal]) END - h.[AwayMod]))
- END AS HomeRatingPoints
- INTO #Temp
- FROM (SELECT
- a.[ID] AS MatchID
- ,a.[AwayTeamID]
- ,a.[AwayTeamPoints] + CASE WHEN a.[AwayTeamID] = a.[WinnerTeamID] THEN 1 ELSE 0 END AS AwayTeamPoints
- ,ISNULL(b.[RatingPoints],100) AS AwayRatingPointTotal
- ,ISNULL(b.[GamePoints],1) AS AwayGamePointTotal
- ,a.[HomeTeamID]
- ,a.[HomeTeamPoints] + CASE WHEN a.[HomeTeamID] = a.[WinnerTeamID] THEN 1 ELSE 0 END AS HomeTeamPoints
- ,ISNULL(c.[RatingPoints],100) AS HomeRatingPointTotal
- ,ISNULL(c.[GamePoints],1) AS HomeGamePointTotal
- ,CASE
- WHEN b.[RatingPoints] IS NOT NULL AND b.[GamePoints] IS NOT NULL AND c.[RatingPoints] IS NOT NULL AND c.[GamePoints] IS NOT NULL THEN
- CASE
- WHEN ABS((b.[RatingPoints]/b.[GamePoints]) - (c.[RatingPoints]/c.[GamePoints])) > 40 THEN
- CASE
- WHEN (b.[RatingPoints]/b.[GamePoints]) > (c.[RatingPoints]/c.[GamePoints]) THEN 10
- ELSE 90
- END
- ELSE 50
- END
- ELSE 50
- END AS AwayMod
- ,CASE
- WHEN b.[RatingPoints] IS NOT NULL AND b.[GamePoints] IS NOT NULL AND c.[RatingPoints] IS NOT NULL AND c.[GamePoints] IS NOT NULL THEN
- CASE
- WHEN ABS((b.[RatingPoints]/b.[GamePoints]) - (c.[RatingPoints]/c.[GamePoints])) > 40 THEN
- CASE
- WHEN (b.[RatingPoints]/b.[GamePoints]) < (c.[RatingPoints]/c.[GamePoints]) THEN 10
- ELSE 90
- END
- ELSE 50
- END
- ELSE 50
- END AS HomeMod
- FROM (SELECT
- TOP 1 *
- FROM Match
- WHERE Processed = 0
- AND WinnerTeamID IS NOT NULL
- ORDER BY ID ASC) AS a
- LEFT JOIN Stage AS s ON s.[ID] = a.[StageID]
- LEFT JOIN #Temp2 AS b ON b.[TeamID] = a.[AwayTeamID]
- LEFT JOIN #Temp2 AS c ON c.[TeamID] = a.[HomeTeamID]) AS h
- UPDATE a
- SET a.[AwayRatingPoints] = z.[AwayRatingPoints]
- FROM match AS a
- INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
- UPDATE a
- SET a.[AwayRating] = z.[AwayRating]
- FROM match AS a
- INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
- UPDATE a
- SET a.[HomeRatingPoints] = z.[HomeRatingPoints]
- FROM match AS a
- INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
- UPDATE a
- SET a.[HomeRating] = z.[HomeRating]
- FROM match AS a
- INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
- UPDATE a
- SET a.[GamePoints] = z.[GamePoints]
- FROM match AS a
- INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
- UPDATE a
- SET Processed = 1
- FROM match AS a
- INNER JOIN #Temp AS z ON z.[MatchID] = a.[ID]
- DROP TABLE #Temp
- DROP TABLE #Temp2
- END;
Add Comment
Please, Sign In to add comment