2010-04-05 36 views
0

我在查詢中遇到了一些困難,目的是在當前年份爲用戶提供多個線程(稱爲CS)5%的點「提升」 。 我的關係模式是這樣的:SQL查詢幫助(向有條件的用戶添加5%)

Thread = (**threadid**, threadname, threadLocation) 

threadoffering = (threadid, season, year, user) 

user = (**name**, points) 

然後,我需要的是檢查:

WHERE thread.threadid = threadoffering.threadid AND where threadoffering.year AND threadoffering.season = currentDate AND where threadoffering.User > 1 

再給予5%提高到user.points

我希望這是徹底的解釋但在這裏它是簡短的文字:

給當前年份中threadLocation CS超過1個線程的所有用戶提供5%的「加分」季節(總是動態的,例如現在是年= 2010和季節=春季)。

我很期待你的答案

真誠, 埃米爾

+0

你是什麼季節不同的定義是什麼?我猜你是說北半球的春天?是嗎...春季:三月,四月和五月 夏季:六月,七月,八月 秋季:九月,十月,十一月 冬季:十二月,一月,二月 – 2010-04-05 09:45:36

+0

用戶表又如何與threadoffering相關? – 2010-04-05 09:52:37

+0

嘿馬丁, 該系統是專爲學生,他們可以互相幫助,所以季節就像術語:有春季和秋季,我猜春季是從2月到7月,秋季是從8月到一月 – Mestika 2010-04-05 09:54:22

回答

0

這應該工作:

SELECT 
    u.name, 
    CASE WHEN (COUNT(*) > 1) 
     THEN MIN(u.points) * 1.05 
     ELSE MIN(u.points) 
    END AS points 
FROM 
    threadoffering to inner join user u 
     on to.user = u.name 
WHERE 
    to.year = @targetYear and to.season = @targetSeason 
GROUP BY 
    u.name 
+0

從OP的WHERE子句中,threadoffering.user是數字,所以我假設他們試圖簡化DDL並省略了一個重要的位。我還以爲他們想要更新查詢? – 2010-04-05 10:47:21

+0

關於WHERE子句中數字用法的好處......如果是這種情況,那麼這個模式是可怕的。此外,更新會非常具有破壞性,但上面的這個查詢可以用來確定要更新的內容。 – 2010-04-05 10:52:28