2010-04-05 76 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