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

SQL Oracle Discussion :

Comptage de lignes


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Comptage de lignes
    Bonjour à tous

    Je viens vous demander votre avis sur la résolution d'un problème pour un comptage.

    Trajet  Lieu de départ  Lieu d'arrivée      Comptage souhaité
    1           A                   B               1 voyage
    -------------------------------------------------------------------------
    2           C                   D
    3           D                   E               1 voyage
    4           E                   F
    ------------------------------------------------------------------------
    5           A                   D               1 voyage


    Comme vous pouvez-le voir dans l'exemple, chaque ligne représente un trajet. Cependant un trajet ne signifie pas un voyage complet, seulement une étape. Je souhaiterais réunir les trajets ayant un lieu d'arrivée similaire à un lieu de départ pour ne compter qu'un seul voyage. Avez vous des pistes pour cette résolution? Cordialement

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    En l'état rien ne permet de différencier le voyage parmi le trajet 2 et 5 par exemple. Il faut un critère supplémentaire qui permette de faire le regroupement des trajets par voyage.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci pour votre retour.

    Je comprends la necessité d'un critère particulier pour faire la "jointure",
    En effet rien ne permet de différencier le 2 et le 5.

    Cependant, n'est il pas possible de spécifier un code qui ne s'interesse qu'au rang n+1 pour créer cette relation entre les trajets? (en l'occurence, les villes)

    Merci

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Oui en effet c'est possible. Quelle est votre version d'Oracle DB ?

    Un premier jet qui numérote le voyage à partir du trajet de départ :
    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
    20
    21
    22
    23
    24
    25
    26
    With MaTable (Trajet, Depart, Arrivee) as
    (
    select 1, 'A', 'B' from dual union all
    select 2, 'C', 'D' from dual union all
    select 3, 'D', 'E' from dual union all
    select 4, 'E', 'F' from dual union all
    select 5, 'A', 'D' from dual
    )
        select t1.Trajet, t1.Depart, t1.Arrivee
             , connect_by_root t1.Trajet as Voyage
          from MaTable t1
    START WITH not exists (select null
                             from MaTable t2
                            where t2.Arrivee    = t1.Depart
                              and t2.trajet + 1 = t1.trajet)
    CONNECT by PRIOR t1.Arrivee    = t1.Depart
           and PRIOR t1.trajet + 1 = t1.trajet
      order by Voyage, Trajet;
     
    TRAJET DEPART ARRIVEE VOYAGE
    ------ ------ ------- ------
         1 A      B            1
         2 C      D            2
         3 D      E            2
         4 E      F            2
         5 A      D            5

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Oracle DB 11g

    Merci pour votre retour waldar, je vais l'adapter à ma DB

    Cordialement

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Si le but est simplement de compter le nombre de voyages, vous pouvez peut être faire plus simple : compter le nombre de "derniers trajets", c'est à dire les trajets pour lesquels le "trajets suivant" a un départ different de l'arrivée (du précédent).
    et comme mon explication n'est pas très claire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT COUNT(*)
    FROM LaTable A
    LEFT JOIN LaTable B
    	ON		B.Trajet = A.Trajet +  1
    WHERE	B.Depart <> A.Arrivee 
    	OR	B.Trajet IS NULL --cas du dernier trajet
    A adapter si vous avez des "trous" dans la séquence de numéro de trajet

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2009
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 49
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par tfs63 Voir le message
    Cependant, n'est il pas possible de spécifier un code qui ne s'interesse qu'au rang n+1 pour créer cette relation entre les trajets? (en l'occurence, les villes)
    Bonjour,

    Si, ça s'appelle les fonctions analytiques (sur Oracle). Ca permet de récupérer les lignes d'un ou d'autres enregistrement(s).
    http://lalystar.developpez.com/fonctionsAnalytiques/

    Dans ton cas par exemple, tu pourrais récupérer la "Ville de Départ" avec la "Ville d'Arrivée de rang - 1", avec les fonctions lag ou lead...

    Mais bon c'est pas évident à manipuler au début !

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir,

    @jmi57 : Merci, je me rappelerai de l'existence de ces fonctions!
    @aieu : Merci pour votre idée, je pense l'utiliser

    Merci beaucoup,

    Cordialement

Discussions similaires

  1. comptage de ligne
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/12/2007, 09h37
  2. méthode de comptage de lignes dans un fichier
    Par romses2 dans le forum Général Python
    Réponses: 9
    Dernier message: 09/08/2007, 18h57
  3. [EXCEL 97]Comptage de lignes
    Par Louis Griffont dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/03/2007, 08h56
  4. [VBA]comptage de lignes en fonction du contenu des cellules
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/12/2005, 11h38
  5. [vbexcel]Comptage de ligne
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/12/2005, 17h22

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