我使用的是SQL Server 2012,需要更新查询帮助。
我有一个显示结果的SQL表。每个结果在活动日期,比赛ID和结果排名(第1第2第3等)中都是唯一的。
每个结果都根据他们在赛事中的表现进行了分配。
最后一个位置,第4个,第3个,第2个和第1个每个事件的点数相同,但最后一个和第四个点之间的点数取决于有多少结果。
E.g。 7结果:
OLD
1 - 150pts
2 - 125pts
3 - 100分
-----------------
4 - 95pts
5 - 90pts
6 - 85分
7日(最后) - 80分
NEW
1 - 300pts
2 - 250pts
3 - 225pts
4 - 200pts
--------------------
5 - 166.666pts
6th - 133.333pts
第7名(最后) - 100分
此积分系统是从旧系统更新的,需要应用。任何人都可以帮助查询计算结果,这是第五个 - 最后一个。感谢
答案 0 :(得分:3)
DROP TABLE #Tmp
CREATE TABLE #Tmp (Place int , Value decimal(22,6))
INSERT INTO #Tmp VALUES(1,300)
INSERT INTO #Tmp VALUES(2,250)
INSERT INTO #Tmp VALUES(3,225)
INSERT INTO #Tmp VALUES(4,200)
Declare @i int
Declare @int int
Declare @ValueToDevide decimal(22,6)
set @ValueToDevide = 100.000000/(10-4)
set @i = 5
set @int = 1
while @i <= 10 begin
INSERT INTO #Tmp VALUES(@i,200-(@ValueToDevide*@int))
set @i = @i + 1
set @int = @int + 1
end
SELECT * FROM #Tmp
ORDER BY Place
我解决你的问题只是因为它很有趣,但这显然不是一个SQL问题,更像是一个数学问题。
它几乎可以获得您想要的结果,更精确一点。你可以弄清楚下一步该做什么。
答案 1 :(得分:1)
毕竟这是一个数学问题,我只需要一个合适的算法。
UPDATE RESULTS
/*
The old system started on 80, the new starts on 100 (-80)&(+100).
The difference between Last and 3rd/4th is now 100 instead of 20 (*5)
*/
SET Points = ((Points - 80)*5)+100
/*Select the appropriate data needed to edit*/
WHERE Position > 4
AND ContestID = 1
OR ContestID = 2
OR ContestID = 3
前4名每次都有相同数量的分数,因此可以对以下结果进行单独更新。