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 26/09/2011, 12h21   #1
Membre actif
 
Avatar de korospoukine
 
Inscription : mars 2006
Messages : 168
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mars 2006
Messages : 168
Points : 152
Points : 152
Envoyer un message via MSN à korospoukine
Par défaut Faire un COUNT sur le résultat d'une requête (dont un UNION)

Bonjour,

J'ai trouvé comment avoir les résultats entre deux bases, une qui recense mes châssis et l'autre qui recense ce qu'il y a dans les châssis, avec la requête suivante :
Code :
1
2
3
4
SELECT ActiveOnBoards.Repartition, COUNT(DISTINCT  ActiveOnBoards.EnclosureName) AS Chassis, COUNT(*) AS Nombre  
FROM ActiveOnBoards, Blades 
WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
GROUP BY ActiveOnBoards.Repartition
J'ai fait la même chose avec la base de reservation
Code :
1
2
3
4
SELECT ActiveOnBoards.Repartition, COUNT(DISTINCT  ActiveOnBoards.EnclosureName) AS Chassis, COUNT(*) AS Nombre  
FROM ActiveOnBoards, BladesReserved 
WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure 
GROUP BY ActiveOnBoards.Repartition
Jusqu'ici tout va bien.
Ensuite, j'ai voulu avoir le résultat de mes deux requêtes dans une seule table :
Code :
1
2
3
4
5
6
7
SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, Blades.slot
FROM ActiveOnBoards, Blades
WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
UNION 
SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, BladesReserved.slot
FROM ActiveOnBoards, BladesReserved
WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure
Ceci fonctionne très bien.
Par contre, où j'ai plus de mal, c'est que je voudrais pouvoir compter le nombre d'enclosurename et de slot pour chaque répartition.
J'ai testé ceci :
Code :
1
2
3
4
5
6
7
8
9
10
SELECT Repartition, COUNT(DISTINCT  EnclosureName) AS Chassis, COUNT(*) AS Nombre
FROM
(
SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, Blades.slot
FROM ActiveOnBoards, Blades
WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
UNION 
SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, BladesReserved.slot
FROM ActiveOnBoards, BladesReserved
WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure)
Cela ne focntionne pas avec ou sans les parenthèses.

Avez-vous une idée ? Une piste ? Ou alors m'orienter sur une autre méthode ?

Merci d'avance.
korospoukine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 12h36   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
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 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Certains SGBD (j'ai SQL-Server en tête) imposent de donner un nom à une sous-requête dans le FROM :
Code :
1
2
3
4
5
6
7
8
9
10
SELECT Repartition, COUNT(DISTINCT  EnclosureName) AS Chassis, COUNT(*) AS Nombre
FROM
(
SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, Blades.slot
FROM ActiveOnBoards, Blades
WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
UNION 
SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, BladesReserved.slot
FROM ActiveOnBoards, BladesReserved
WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure) AS SR
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 12h50   #3
Membre actif
 
Avatar de korospoukine
 
Inscription : mars 2006
Messages : 168
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mars 2006
Messages : 168
Points : 152
Points : 152
Envoyer un message via MSN à korospoukine
Merci cela fonctionne.
Par contre il faut bien penser à mettre un GROUP BY à la fin.
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT Repartition, COUNT(DISTINCT  EnclosureName) AS Chassis, COUNT(*) AS Nombre
FROM
(
SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, Blades.slot
FROM ActiveOnBoards, Blades
WHERE ActiveOnBoards.EnclosureName=Blades.Enclosure 
UNION 
SELECT ActiveOnBoards.Repartition, ActiveOnBoards.EnclosureName, BladesReserved.slot
FROM ActiveOnBoards, BladesReserved
WHERE ActiveOnBoards.EnclosureName=BladesReserved.Enclosure) AS SR
GROUP BY Repartition
korospoukine 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 18h11.


 
 
 
 
Partenaires

Hébergement Web