Voilà, j’ai ça :
Table Client:
-clientID
-name
Table Compte:
-compteID
-categorie
-clientID
-Solde
-CodeDevise
Table Devise:
-CodeDevise
-Date
-Taux
But de la requete:
Trouver la liste des noms de clients qui ont un solde total de tous leurs comptes >100.000 dans la categorie “FIDU” à la date du jour et qui habitent à “Paris”.
Je bloque deja sur l’histoire de la somme des comptes
Please help
Je dirais ça :
SELECT CL.clientID, CL.name
FROM Client CL
WHERE CL.clientID IN(
SELECT CO.clientID
FROM Compte CO
WHERE CO.clientID = CL.clientID AND SUM(CO.Solde) > 100000
GROUP BY CO.clientID
)
Surtout, amuse toi bien pour ajouter la contrainte sur les types de comptes
j’en suis a là pour l’instant :
SELECT Client.name
FROM Client
INNER JOIN Compte on Client.clientId = Compte.clientID
INNER JOIN Devise on Compte.codedevise = Devise.codedevise
GROUP BY Client.name
HAVING SUM(Compte.solde) >100000
mais il me reste encore la date du jour a gerer et le taux de change.
Pour la somme, le secret c’est un “having sum”…
mais on peut aussi le faire avec une requ^te imbriquée (par contre sum dans le where c’est interdit, il faut le mettre en colonne, et tester les résultat de la colonne)
Il manque une table pour sélectionner uniquement ceux de Paris
SELECT CL.clientID, CL.name
FROM Client CL
inner join Compte CO
on CO.clientID = CL.clientID
WHERE
CO.CodeDevise = 'EUR' AND
CO.categorie ="FIDU'
GROUP BY CO.clientID having SUM(CO.Solde) > 100000
)
edit: je n’avais pas vu, mais tu n’en es pas loin apparamment, la jointure sur la devise n’est pas utile par contre, psuiqu’on sélectionne directementsur l’id.
Edité le 22/08/2007 à 20:31
SELECT Client.name
FROM Client
INNER JOIN Compte on Client.clientId = Compte.clientID
INNER JOIN Devise on Compte.codedevise = Devise.codedevise
GROUP BY Client.name, Devise.date, Client.ville, Compte.categorie
HAVING SUM(Compte.solde * Devise.taux) > 100000
AND Devise.date = CONVERT(CHAR(10),GETDATE(),110)
AND Client.ville = ‘Geneve’
AND Compte.categorie = ‘fidu’
voilà j’y suis, je vais regarder pour cette histoire de jointure mais en tout cas ça a l’air de marcher.
merci
Au départ, j’avais mis un HAVING.