IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Formaliser la requête (données croisées)


Sujet :

Langage SQL

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 180
    Points : 275
    Points
    275
    Par défaut Formaliser la requête (données croisées)
    j'ai un soucis pour formaliser une requête voilà mon cas :

    j'ai 4 tables :
    • - catégorie
      - produit
      - controle
      - controleur

    un produit a une catégorie
    un produit passe un controle
    un controle est effectué par un controleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    T_CATEGORIE(0,n)->(1,1)T_PRODUIT(0,n)->(1,1)T_CONTROLE(1,1)<-(0,n)T_CONTROLEUR
    je voudrais à partir de là effectué une requête qui me permettrais
    de récupérer le nb de controle par catégorie et par controleur
    le résultat est de la forme d'un tableau à double entrée
    en abscisse les catégories
    en ordonnée les controleurs
    a l'intersection de chacun le nb de controle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    -------------------------------
    CTRL\CAT|CAT 1|CAT 2|...|CAT n|
    -------------------------------
    CTRL 1  |12   |5    |...|n    |
    -------------------------------
    ....                          |
    -------------------------------
    CTRL n  |n    |n    |...|n    |
    -------------------------------
    cdt JeAn-PhI
    Cordialement JeAn-PhI

  2. #2
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    En SQL standard on ne peut pas faire simplement un tableau croisé dynamique.

    Plusieurs solutions

    1-Laisser sa requête telle quelle et utiliser les fonctions de tableau croisé dynamique des clients (Delphi, Business Objects, Excel, Crystal Reports).

    2-Ou faire la requête en dur (ou en sql dynamique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT Req.ID_CTRL, SUM(Req.nb_CAT_1) ,sum(Req.nb_CAT_2),sum (Req.nb_CAT_3)
    FROM 
            (
            SELECT ID_CTRL, 
            (case when ID_TYP_CAT=1 then nb_produit else 0 end) nb_CAT_1,
            0 as nb_CAT_2, 
            0 as nb_CAT_3
            FROM MES_TABLES bla bla
            UNION
            SELECT ID_CTRL, 0 as nb_CAT_1,
            (case when ID_TYP_CAT=2 then nb_produit else 0 end) nb_CAT_2,
            0 nb_CAT_3
            FROM MES_TABLES bla bla
            UNION
            SELECT ID_CTRL, 0 nb_CAT_1,0 nb_CAT_2,
            (case when ID_TYP_CAT=3 then nb_produit else 0 end) nb_CAT_3
            FROM MES_TABLES bla bla
            ) Req
    GROUP BY ID_CTRL
    3- Ou Utiliser des fonctions SQL avancées de regroupement (que je ne connais pas et qui n'existe pas en standard SQL à ma connaissance) ???? Peut-être il faut chercher par là ? : http://sheikyerbouti.developpez.com/evol_9i/#L11.4

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 180
    Points : 275
    Points
    275
    Par défaut
    merci de la réponse je crois qu'il ne me reste plus qu'a codé tout à la mimine car je voulais un truc complètement dynamique en fonction de l'évolution des catégories et ou controleurs
    arfffff

    thx

    cdt
    Cordialement JeAn-PhI

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 180
    Points : 275
    Points
    275
    Par défaut solution requête
    la requête est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT T_CATEGORIE.CT_ID, T_CONTROLEUR.CN_ID, COUNT(*) as NbControle
    FROM T_CONTROLEUR, T_CONTROLE, T_PRODUIT, T_CATEGORIE
    WHERE T_CONTROLEUR.CN_ID = T_CONTROLE.CN_ID
    AND T_PRODUIT.PR_ID = T_CONTROLE.PR_ID
    AND T_CATEGORIE.CT_ID = T_PRODUIT.CT_ID
    GROUP BY T_CATEGORIE.CT_ID, T_CONTROLEUR.CN_ID
    ORDER BY CN_ID ASC, CT_ID ASC
    Cordialement JeAn-PhI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/11/2014, 22h13
  2. Réponses: 7
    Dernier message: 04/09/2011, 18h14
  3. Zones vides dans Requête Analyse croisée
    Par sbeprod dans le forum Access
    Réponses: 2
    Dernier message: 12/12/2005, 14h03
  4. Requête Analyse Croisée
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 07/11/2005, 18h13
  5. Requêtes analyses croisées sous SQL Server 2000
    Par callo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/09/2005, 19h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo