2010-04-05 6 views
0

Je rencontre des difficultés avec une requête qui a pour but de donner aux utilisateurs ayant plus d'un thread (appelé CS) dans l'année en cours un "raise" de 5% . Mon schéma relationnel ressemble à ceci:Aide avec requête SQL (ajouter 5% aux utilisateurs avec des conditions)

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

threadoffering = (threadid, season, year, user) 

user = (**name**, points) 

Alors, ce que je dois est de vérifier:

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

alors donner 5% raise À user.points

J'espère qu'il est expliqué à fond mais sinon il est ici dans le texte court:

Donner une augmentation de 5% "point" à tous les utilisateurs qui ont plus de 1 thread dans threadLocation CS dans l'année en cours a Saison (toujours dynamique, par exemple maintenant année = 2010 et saison est = printemps).

Je suis impatient de votre réponse

Sincèrement, Emil

+0

Quelle est votre définition de différentes saisons? Je présume que vous voulez dire le printemps dans l'hémisphère Nord? Est-ce que ... Printemps: Mars, Avril et Mai Été: Juin, Juillet, Août Automne: Septembre, Octobre, Novembre Hiver: Décembre, Janvier, Février –

+0

Comment est la table User liée à threadoffering? –

+0

Hey Martin, le système est conçu pour les étudiants où ils peuvent s'entraider pour que la saison soit comme terme: il y a PRINTEMPS et il y a AUTOMNE, et je suppose que le PRINTEMPS est de février à juillet et le AUTOMNE est d'août à Janvier – Mestika

Répondre

0

Cela devrait fonctionner:

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

De la clause WHERE de l'OP, threadoffering.user est numérique, donc je suppose qu'ils ont essayé de simplifier le DDL et ont laissé de côté un bit vital. Aussi je pensais qu'ils voulaient une requête UPDATE? –

+0

Bon point sur l'utilisation numérique dans la clause WHERE ... si tel est le cas, alors ce schéma est affreux. En outre, la mise à jour serait très destructrice, mais cette requête ci-dessus pourrait être utilisée pour déterminer à quoi mettre à jour. –