SQL - Création d'une requête avec des sous requêtes

[Résolu]
Signaler
Messages postés
19
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
11 mars 2009
-
Messages postés
19
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
11 mars 2009
-
Bonjour,

Je suis sur une application qui rassemble des statuts de flux par serveur qui sont affectés à une ou plusieurs applications.

Je voudrais, en simplifiant (le but étant surtout d'avoir l'idée général pour créer la requête), que pour chaque application, une meme requête me renvoit le nombre de flux OK, le nombre de flux KO...

Exemple : Appli            OK              KO
               Toto               15                 5
               Titi                  5                 10

Pour cela j'ai plusieurs tables mais bon on va juste prendre en compte la table :
- STATUTS qui contient le serveur, le numéro du flux et le statut
- APPLI_SERVEURS_PORT qui contient le nom de l'application, le serveur, le numéro de flux

J'ai essayé avec des sous requêtes mais je ne n'arrive à obtenir ce que je veux.

Ma question est donc la suivante, malgré la simplicité apparante du petit tableau que je veux obtenir, je bloque sur la création de la requête. Je serais donc extrèmenet reconnaissante à la ou les personnes qui pourront m'aider à créer cette requête.

Merci de votre aide.

6 réponses

Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
3
Ouai Nix aime bien saloper les mises en page :p

En premier lieu, évite les chaines de caractére pour indiquer un état, un booléen ou un entier est souvent plus simple à manipuler, si jamais tu veux laisser une trace de quel nombre correspond à quel état, tu fais une 'tite table style

EtatsFlux:
code Description
0         KO
1         OK
et comme ca un jour tu pourras rajouter si ca s'avére intéréssant :
2        Démarrage en cours

ceci mis a part :

SELECT
   APPLIS.Appli,
   (
      SELECT COUNT (*)
      FROM APPLI_SERVEURS_PORT
      INNER JOIN STATUT
         ON APPLI_SERVEURS_PORT.Serveur=STATUT.Serveur
         AND APPLI_SERVEURS_PORT.Port=STATUT.Port
      WHERE APPLI_SERVEURS_PORT.Appli= APPLIS.Appli
      AND STATUT.Statut = 'OK'
   ) AS OK,
   (
      SELECT COUNT (*)
      FROM APPLI_SERVEURS_PORT
      INNER JOIN STATUT
         ON APPLI_SERVEURS_PORT.Serveur=STATUT.Serveur
         AND APPLI_SERVEURS_PORT.Port=STATUT.Port
      WHERE APPLI_SERVEURS_PORT.Appli= APPLIS.Appli
      AND STATUT.Statut = 'KO'
   ) AS KO
FROM
(
   SELECT Appli
   FROM APPLI_SERVEURS_PORT
   GROUP BY Appli
) APPLIS

ceci devrais fonctionner, c'est assez "crade" mais je ne connais pas trés bien Access donc j'ai essayer d'éviter les opérations complexe, ca doit pouvoir être fortement optimisé.

peut-être ca sinon :

SELECT 
   APPLI_SERVEURS_PORT.Appli,
   SUM(IIF(STATUT.Statut='OK',1,0)) AS OK,
   SUM(IIF(STATUT.Statut='KO',1,0)) AS KO
FROM APPLI_SERVEURS_PORT
INNER JOIN STATUT
   ON APPLI_SERVEURS_PORT.Serveur=STATUT.Serveur
   AND APPLI_SERVEURS_PORT.Port=STATUT.Port
GROUP BY Appli

Si la deuxiéme fonctionne, elle me semble plus simple et plus optimisé...
Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
3
Peux tu nous donnez la structures exact de ces table et même si possible une ou 2 ligne avec le résultat attendu, C'est bien plus simple pour comprendre. Merci d'avance ^^"
Messages postés
19
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
11 mars 2009

Bonjour Malkuth,


Bien sur :


voici un exemple du contenu de la table STATUT :


- serveur            le numéro du flux            statut
   serveur1                     22                        OK
   serveur1                     80                        KO
   serveur2                      22                       KO                        

Table APPLI_SERVEURS_PORT :
nom de l'application      le serveur         le numéro de flux
    appli_toto                  serveur1                      80
    appli_titi                     serveur1                      22
    appli_toto                  serveur2                      22

Et donc ce que je veux obtenir c'est :
 Appli                OK                   KO
appli_toto            0                        2
appli_titi               1                        0

Est ce que c'est plus clair. Si ca ne l'est pas n'hésites pas à me redemander. Merci
Messages postés
19
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
11 mars 2009

Désolée pour la mise en page, il a tout décalé... :S
Messages postés
19
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
11 mars 2009

Merci beaucoup, je vais tester les deux solutions. Je te redirais ce que ca a donné.


encore merci
Messages postés
19
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
11 mars 2009

Bonjour,

J'ai testé et après adapation ca fonctionne :) pour info j'ai pris la première solution

Merci Bcp