根据相同和其他字段更新每个字段

时间:2014-12-04 14:01:11

标签: sql-server sql-server-2012 sql-update

我使用的是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分

此积分系统是从旧系统更新的,需要应用。任何人都可以帮助查询计算结果,这是第五个 - 最后一个。感谢

2 个答案:

答案 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名每次都有相同数量的分数,因此可以对以下结果进行单独更新。