2014-12-04 104 views
-1

我是使用SQL Server 2012的ameture,需要有关更新查询的帮助。根据相同和其他字段更新每个字段

我有一个SQL表格显示结果。每个结果在活动日期,比赛ID和结果排名(第一第二第三等)中都是唯一的。

每个结果都根据他们在活动中的表现得到了分数。

最后一位,第4位,第3位,第2位和第1位对于每个事件都具有相同的分数,而最后一位和第4位之间的分数取决于有多少结果。

E.g. 7个结果:

OLD
月1日 - 150pts
2日 - 125pts
3日 - 100pts
-----------------
4日 - 95pts
5 - 90pts
6日 - 85pts
7日(最后) - 80pts


月1日 - 300pts
第二 - 250pts
3日 - 225pts
4日 - 200pts
--------------------
5日 - 166.666pts
6日 - 133.333pts
7日(最后) - 100分

这个分数系统是从旧系统更新并需要应用。任何人都可以帮助查询计算结果是第5 - 最后。谢谢

回答

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

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问题,更是一个数学问题。

它几乎得到你想要的结果,更精确一点。你可以找出下一步该做什么。

+0

我如何计算每次比赛有多少结果?我想用变量替换10。每场比赛都有所不同。 (我有将近3000条记录要编辑) – Chris 2014-12-04 23:08:10

+0

我们需要更多的一个例子来给你一个很好的答案,数据如何组织在表中,表中有哪些列。一个更详细的例子。 – CiucaS 2014-12-05 09:39:26

+0

感谢您指点我正确的方向。我计算了一下(如下)。我已经更新了这个问题,使它与我正在尝试做的事更加清晰 – 2014-12-05 10:45:36

相关问题