2014-12-04 144 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

相關問題