Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 14/01/2012, 16h24   #1
Invité de passage
 
Homme Yo
Architecte réseau
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Yo

Informations professionnelles :
Activité : Architecte réseau
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 1
Points : 1
Par défaut Afficher les résultats de plusieurs requêtes dans un même tableau

Bonjour,
je cherche à afficher dans un même tableau les résultats de plusieurs requêtes qui s'applique sur la même table avec des critères différents. Les résultats de mes trois requêtes ont quatre colonnes identiques (pole, fournisseur, année, mois) et je voudrais pouvoir ajouter des colonnes qui seraient des stats suivant différents critères. voici mes requêtes:
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT nomPole AS Pôle, nomFournisseur AS Fournisseur, year( datevalidation ) AS Année, month( dateVT ) AS Mois, count( * ) AS Volume, AVG( taux ) AS CTTVX
FROM fiche, utilisateur, equipe, pole, fournisseur
WHERE year( dateVT ) >2010
AND fiche.fichechantier =0
AND fiche.activestats =1
AND fiche.etat !=0
AND utilisateur.idUtilisateur = fiche.idUtilisateur
AND utilisateur.idEquipe = equipe.idEquipe
AND equipe.idpole = pole.idpole
AND fiche.idfournisseur = fournisseur.idfournisseur
GROUP BY nomPole, nomFournisseur, year( dateVT ) , month( dateVT )
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT nomPole AS Pôle, nomFournisseur AS Fournisseur, year( datevalidation ) AS Année, month( dateVT ) AS Mois, count( * ) AS Echecs
FROM fiche, utilisateur, equipe, pole, fournisseur
WHERE year( dateVT ) >2010
AND fiche.fichechantier =0
AND fiche.activestats =1
AND fiche.etat !=0
AND fiche.etat
IN ( 3, 4, 8 ) 
AND utilisateur.idUtilisateur = fiche.idUtilisateur
AND utilisateur.idEquipe = equipe.idEquipe
AND equipe.idpole = pole.idpole
AND fiche.idfournisseur = fournisseur.idfournisseur
GROUP BY nomPole, nomFournisseur, year( dateVT ) , month( dateVT )
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT nomPole AS Pôle, nomFournisseur AS Fournisseur, year( datevalidation ) AS Année, month( dateVT ) AS Mois, count( * ) AS ReprisesNecessaires
FROM fiche, utilisateur, equipe, pole, fournisseur
WHERE year( dateVT ) >2010
AND fiche.fichechantier =0
AND fiche.activestats =1
AND fiche.etat !=0
AND fiche.etat
IN ( 3, 4 ) 
AND utilisateur.idUtilisateur = fiche.idUtilisateur
AND utilisateur.idEquipe = equipe.idEquipe
AND equipe.idpole = pole.idpole
AND fiche.idfournisseur = fournisseur.idfournisseur
GROUP BY nomPole, nomFournisseur, year( dateVT ) , month( dateVT )
Je fais appel à votre expertise après avoir bataillé longtemps avec des union, des join, sans succès...

merci d'avance pour votre aide et je reste à disposition pour des compléments d'informations.

Yo
dehlio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 19h22   #2
Membre du Club
 
Homme Alain Caumes
Chef de projet MOA
Inscription : juillet 2011
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme Alain Caumes
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Transports

Informations forums :
Inscription : juillet 2011
Messages : 26
Points : 56
Points : 56
Bonjour,

Pour réponde à ce que tu demandes, je rajouterais une colonne vide dans les deux requêtes qui portent une colonne en moins.

Quelque chose comme ça:


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
SELECT nomPole AS Pôle, nomFournisseur AS Fournisseur, year( datevalidation ) AS Année, month( dateVT ) AS Mois, count( * ) AS Volume, AVG( taux ) AS CTTVX
FROM fiche, utilisateur, equipe, pole, fournisseur
WHERE year( dateVT ) >2010
AND fiche.fichechantier =0
AND fiche.activestats =1
AND fiche.etat !=0
AND utilisateur.idUtilisateur = fiche.idUtilisateur
AND utilisateur.idEquipe = equipe.idEquipe
AND equipe.idpole = pole.idpole
AND fiche.idfournisseur = fournisseur.idfournisseur
GROUP BY nomPole, nomFournisseur, year( dateVT ) , month( dateVT )
union
SELECT nomPole AS Pôle, nomFournisseur AS Fournisseur, year( datevalidation ) AS Année, month( dateVT ) AS Mois, count( * ) AS Echecs, 0.0
FROM fiche, utilisateur, equipe, pole, fournisseur
WHERE year( dateVT ) >2010
AND fiche.fichechantier =0
AND fiche.activestats =1
AND fiche.etat !=0
AND fiche.etat
IN ( 3, 4, 8 ) 
AND utilisateur.idUtilisateur = fiche.idUtilisateur
AND utilisateur.idEquipe = equipe.idEquipe
AND equipe.idpole = pole.idpole
AND fiche.idfournisseur = fournisseur.idfournisseur
GROUP BY nomPole, nomFournisseur, year( dateVT ) , month( dateVT )
union
SELECT nomPole AS Pôle, nomFournisseur AS Fournisseur, year( datevalidation ) AS Année, month( dateVT ) AS Mois, count( * ) AS ReprisesNecessaires, 0.0
FROM fiche, utilisateur, equipe, pole, fournisseur
WHERE year( dateVT ) >2010
AND fiche.fichechantier =0
AND fiche.activestats =1
AND fiche.etat !=0
AND fiche.etat
IN ( 3, 4 ) 
AND utilisateur.idUtilisateur = fiche.idUtilisateur
AND utilisateur.idEquipe = equipe.idEquipe
AND equipe.idpole = pole.idpole
AND fiche.idfournisseur = fournisseur.idfournisseur
GROUP BY nomPole, nomFournisseur, year( dateVT ) , month( dateVT )

Dans ce cas:
* le titre des colonnes sera celui de la première requête.
* Tu obtiendras de une à trois lignes par pôle, fournisseur et mois.

Personnellement, je mettrais les statistiques sur une ligne en utilisant le case SQL comme ceci:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
SELECT nomPole AS Pôle, nomFournisseur AS Fournisseur, year( datevalidation ) AS Année, 
       month( dateVT ) AS Mois, count( * ) AS Volume, AVG( taux ) AS CTTVX , 
       sum( case 
            when  fiche.etat IN ( 3, 4, 8 ) then 1
            else 0 end ) AS AS Echecs,
       sum( case 
            when  fiche.etat IN ( 3, 4 ) then 1
            else 0 end ) AS AS ReprisesNecessaires
FROM fiche, utilisateur, equipe, pole, fournisseur
WHERE year( dateVT ) >2010
AND fiche.fichechantier =0
AND fiche.activestats =1
AND fiche.etat !=0
AND utilisateur.idUtilisateur = fiche.idUtilisateur
AND utilisateur.idEquipe = equipe.idEquipe
AND equipe.idpole = pole.idpole
AND fiche.idfournisseur = fournisseur.idfournisseur
GROUP BY nomPole, nomFournisseur, year( dateVT ) , month( dateVT )
Cordialement
acaumes est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 14/01/2012, 21h33   #3
Invité de passage
 
Homme Yo
Architecte réseau
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Yo

Informations professionnelles :
Activité : Architecte réseau
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 1
Points : 1
Par défaut merci acaumes

je viens de tester et c'est exactement ce que je cherchais!

j'ai toutes les stats sur une ligne par pole, fournisseur, année et mois... extra.

j'aurais pas trouvé!
merci
dehlio 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 23h33.


 
 
 
 
Partenaires

Hébergement Web