Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/01/2012, 17h23   #1
Membre du Club
 
Inscription : octobre 2007
Messages : 160
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 160
Points : 46
Points : 46
Par défaut Problème sum et left outer join from multi table

bonjour
j'ai une requête imbriqué qui doit retourner les taux depuis une table 1 et la somme d'un champs d'une autre table 2, le problème c'est que le résultat de la somme se multiplie par le nombre de résultat qui se trouve dans la deuxième table
exemple:
si la somme doit retourner 10
et le nombre des ligne qui contient l'information dans l'autre table sont 10
le résultat que j'aurai est la multiplication de 10*10=100
voici ma requête:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 
SELECT p.per_id,LA.num_log,per_nom + ' ' +per_prenom 'Nom',sum(nb_appel)'Nbre_appel',
isnull(100*(convert(float,sum(nb_ticket_hot))/sum(nb_appel)),0) 'Tx_creation_ticket',
isnull(convert(float,sum(nb_ticket_refuse_net))/sum(nb_appel),0)*100 'Tx_refus_ticket',
isnull(convert(float,SUM(nb_once_done))/SUM(nb_contact_prim),0)*100 'Taux_OD',
isnull(convert(float,SUM(nb_1st_done))/SUM(nb_contacts),0)*100 'Taux_FD',
isnull(convert(float,SUM(somme_trait))/sum(nb_appel),0)*100 'Taux_histo'
 FROM personne p LEFT OUTER JOIN LogAffecte LA  ON LA.per_id=p.per_id LEFT OUTER JOIN FAI_Dolmen_Once_Donce FD  ON LA.num_log=FD.log_agent
 LEFT OUTER JOIN FAI_tickets FT ON num_log=FT.log_agent LEFT OUTER JOIN FAI_Total_Codif TC ON TC.log_agent=FT.log_agent  WHERE
(FT.annee=2011 AND FT.date_fichier BETWEEN 44 AND 52)OR (FD.annee=2011 AND FD.semaine BETWEEN 44 AND 52) OR (TC.annee=2011 AND TC.date_fichier BETWEEN 44 AND 52)
GROUP BY p.per_id,LA.num_log,p.per_nom,p.per_prenom
nabilfaouzi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 18h26   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 688
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 688
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il faut scinder les requêtes et les regrouper ensuite pour éviter le phénomène que vous avez décrit.

Par exemple :
Code :
1
2
3
4
5
6
7
8
WITH Req1 (id, tot1) AS (SELECT id, sum(tot) FROM table1 GROUP BY id)
   , Req2 (id, tot2) AS (SELECT id, sum(tot) FROM table2 GROUP BY id)
SELECT Rf.id, Rf.nom
     , coalesce(R1.tot1, 0) AS tot1
     , coalesce(R2.tot2, 0) AS tot2
  FROM Reference AS Rf
       LEFT OUTER JOIN Req1 AS R1 ON R1.id = Rf.id
       LEFT OUTER JOIN Req2 AS R2 ON R2.id = Rf.id
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h06   #3
Membre du Club
 
Inscription : octobre 2007
Messages : 160
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 160
Points : 46
Points : 46
Ta réponse est trop parfaite, merci bcpppppppppppppp pour ton retour
nabilfaouzi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h40.


 
 
 
 
Partenaires

Hébergement Web