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

Requêtes et SQL. Discussion :

Regroupements un peu spéciaux


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut Regroupements un peu spéciaux
    Bonjour,

    Je cherche à faire des regroupements un peu particuliers. Voici un exemple (un peu long) de ce que je cherche à faire:

    J'ai 2 tables liées:

    TRANSPORT (TR_ID,TR_Nom)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1___Camion           
    2___Voiture           
    3___Scooter
    VEHICULES (V_ID,V_NOM,TR_ID)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1___Camion1___1
    2___Camion2___1
    3___Camion3___1
    4___Voiture1___2
    5___Voiture2___2
    6___Scooter1___3
    Et une table ACTIVITE (A_Date,A_Vehicule,A_Libelle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    01/01/08___Camion1___Livraison
    01/01/08___Camion2___Livraison
    01/01/08___Camion3___Livraison
    01/01/08___Voiture1___Livraison
    01/01/08___Scooter1___Livraison
    02/01/08___Camion1___Livraison
    02/01/08___Camion2___Livraison
    02/01/08___Camion3___Revision
    02/01/08___Voiture1___Revision
    02/01/08___Voiture2___Revision
    Je cherche à obtenir une liste où les regroupements par A_date/A_Libelle se fassent en fonction du type de vehicule (TR_ID) c'est à dire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    01/01/08___TOUS_Camion___Livraison
    01/01/08___Voiture1________Livraison
    01/01/08___Scooter1_______Livraison
    02/01/08___Camion1________Livraison
    02/01/08___Camion2________ Livraison
    02/01/08___Camion3________Revision
    02/01/08___TOUS_Voiture___Revision
    TOUS_Camion/TOUS_Voiture est un libellé spécial si tous les véhicules de même type ont effectué à la même date, la même activité.

    Auriez-vous une piste car je bloque depuis 2 jours...

    Merci

    Olivier

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Tu peux facilement compter combien de véhicules par type existent :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TRANSPORT.TR_NOM, COUNT(VEHICULES.V_ID) AS NombreTotal
    FROM TRANSPORT
    INNER JOIN VEHICULES ON TRANSPORT.TR_ID = VEHICULES.TR_ID
    GROUP BY TRANSPORT.TR_NOM
    Tu devrais aussi pouvoir compter combien de véhicules ont eu la même activité par type et par date :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ACTIVITE.A_DATE, TRANSPORT.TR_NOM AS TypeVehicule, ACTIVITE.A_LIBELLE, COUNT(ACTIVITE.A_VEHICULE) AS Nombre
    FROM ACTIVITE
    INNER JOIN VEHICULES ON ACTIVITE.A_VEHICULE = VEHICULES.V_NOM
    INNER JOIN TRANSPORT ON TRANSPORT.TR_ID = VEHICULES.TR_ID
    GROUP BY ACTIVITE.A_DATE, ACTIVITE.A_LIBELLE
    Au passage, je te signale que tu devrais mettre V.ID en clé étrangère dans la table ACTIVITE plutôt que A_VEHICULE qui reprend le nom du véhicule.

    Ensuite, la requête ci-dessus ne sera peut-être pas acceptée tel quel par Access qui imbrique les jointures de façon bizarre.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut reponse à CinePhil
    Tout à fait d'accord concernant V_ID remplacant A_VEHICULE. J'ai écris ça de telle manière que ce soit plus "visible"

    J'ai essayé ton code mais Access n'aime pas...

    Bon, je me suis arraché encore quelques cheveux et j'ai créé comme tu suggerais un Query "Q0" pour compter le nb de véhicules par type:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TRANSPORT.TR_ID, Count(VEHICULES.V_ID) AS NombreTotal
    FROM TRANSPORT INNER JOIN VEHICULES ON TRANSPORT.TR_ID = VEHICULES.TR_ID
    GROUP BY TRANSPORT.TR_ID;
    ensuite j'ai créé un Query Q1 qui prend en compte les regroupements possibles:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ACTIVITE.A_DATE, 'TOUS_' & [TR_NOM] AS VehiculeType, ACTIVITE.A_LIBELLE
    FROM TRANSPORT INNER JOIN ((VEHICULES INNER JOIN Q0 ON VEHICULES.TR_ID = Q0.TR_ID) 
    INNER JOIN ACTIVITE ON VEHICULES.V_ID = ACTIVITE.V_ID) ON TRANSPORT.TR_ID = VEHICULES.TR_ID
    GROUP BY ACTIVITE.A_DATE, 'TOUS_' & [TR_NOM], ACTIVITE.A_LIBELLE, Q0.NombreTotal
    HAVING Count(VEHICULES.V_ID)=[NombreTotal] AND Q0.NombreTotal>1
    J'obtiens:
    A_DATE____VehiculeType____A_LIBELLE
    01/01/08___TOUS_Camion____Livraison
    02/01/08___TOUS_Voiture____Revision
    Ce qui me va...MAIS il manque maintenant les 5 autres enregistrements, ceux où aucun regroupement a été effectué. Et là est la pierre d'achoppement !

Discussions similaires

  1. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 16h49
  2. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23
  3. RTL60 ( la jsuis un peu confused)
    Par magdoz dans le forum Outils
    Réponses: 7
    Dernier message: 23/07/2002, 11h20
  4. DirectX 6, un peu en retard ... :\
    Par multani dans le forum DirectX
    Réponses: 3
    Dernier message: 28/05/2002, 19h19

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