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 :

Demande d'aide pour une requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut Demande d'aide pour une requête
    Bonjour,

    Je souhaite effectuer une requête sous Oracle mais je m'embrouille et me perds. Est ce que quelqu'un peut m'aider ?

    Voici mes tables en version simplifiées :

    • PERIODE : numero (int), libelle (string), lundi (bool), mardi (bool), mercredi (bool), jeudi (bool), vendredi (bool), samedi(bool), dimanche (bool)
    • TRAIN : numero (int), periode (int), annee (int)

      Sachant que "numéro" est la clé dans les 2 cas, je cherche à afficher le nombre de trains par année puis par jour.


    Pour l'instant j'arrive juste à afficher les trains par année :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select periode.annee, count(train.numero)
    from train, periode
    where train.periode= periode.numero
    group by periode.annee
    order by periode.annee;

    Est ce que quelqu'un a une idée ? Sachant bien sûr que je ne peux pas modifier ces tables. Merci d'avance !!!

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tout d'abord la notation
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM Table1, Table2
    n'est plus utilisée depuis des années ! En SQL2 il faut utiliser les opérateurs de jointures.

    Concernant la requête pour le nombre de trains par année, je pense qu'il suffit de faire :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t.annee, count(t.numero)
    FROM train t
    GROUP BY t.annee
    ORDER BY t.annee

    Et pour celle du nombre de trains par période :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT p.Libelle, COUNT(t.numero)
    FROM train t
        INNER JOIN periode p ON p.numero = t.periode
    GROUP BY p.Libelle
    ORDER BY p.Libelle
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut
    Merci pour ta réponse mais en fait il me faudrait qu'une seule requête pour obtenir un résultat du genre :
    Annee     Jour      Nb_train
    ----------------------------
    2010     lundi           253
    2010     mardi           458
    2010     mercredi        954
    2010     jeudi           686
    2010     vendredi        985
    2010     samedi          281
    2010     dimanche         53
    2011     lundi           659
    2011     mardi           567
    2011     mercredi        211
    2011     jeudi           658
    2011     vendredi        834
    2011     samedi          516
    2011     dimanche         68
    Le résultat est d'abord groupé par année puis par jour de la semaine.

    PS : pour la jointure c'est ce que l'on m'a appris à la fac l'année dernière. Merci pour le tuyau

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Tout d'abord la notation
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM Table1, Table2
    n'est plus utilisée depuis des années ! En SQL2 il faut utiliser les opérateurs de jointures.
    ...
    Non il ne faut pas; ce n’est pas une obligation! C’est juste une question de « préférence » et Oracle est réputé pour un certains nombre des bugs lié justement à l’écriture ANSI.

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Non il ne faut pas; ce n’est pas une obligation! C’est juste une question de « préférence » et Oracle est réputé pour un certains nombre des bugs lié justement à l’écriture ANSI.
    Effectivement c'est une préférence Mais autant prendre les bons réflexes, plutôt que de s'habituer à la vieille notation. Il me semble que les bugs d'Oracle sur ANSI ont été corrigés dans la version 11g, me trompe-je ?

    Concernant la question initiale, alors la requête ressemblerait à quelque chose du genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t.annee, p.Libelle, count(t.numero) nombreDeTrains
    FROM train t
        INNER JOIN periode p ON p.numero = t.periode
    GROUP BY p.Libelle, t.annee
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Par défaut
    J'ai trouvé ! Merci pour votre aide

    Voici mon code :
    Code sql : 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
    select train.periode, periode2.Jour, count(train.numero) "Nb de trains"
    from train,
    (select '1 Lundi' Jour, periode.numero from periode where periode.LUNDI = TRUE
    union
    select '2 Mardi' Jour, periode.numero from periode where periode.MARDI = TRUE
    union
    select '3 Mercredi' Jour, periode.numero from periode where periode.MERCREDI = TRUE
    union
    select '4 Jeudi' Jour, periode.numero from periode where periode.JEUDI = TRUE
    union
    select '5 Vendredi' Jour, periode.numero from periode where periode.VENDREDI = TRUE
    union
    select '6 Samedi' Jour, periode.numero from periode where periode.SAMEDI = TRUE
    union
    select '7 Dimanche' Jour, periode.numero from periode where periode.DIMANCHE = TRUE) periode2
    where train.periode = periode.numero
    group by train.periode, periode2.Jour
    order by train.periode;

  7. #7
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Pourquoi autant de sous-requêtes ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

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

Discussions similaires

  1. Demande d'aide pour une requête avec jointure
    Par marcoxavier dans le forum Développement
    Réponses: 8
    Dernier message: 26/05/2015, 16h04
  2. Demande d'aide pour une requête
    Par jmclej dans le forum SQL
    Réponses: 6
    Dernier message: 17/11/2014, 10h53
  3. Humble demande d'aide pour une requête multi tables
    Par JayWBurn dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/06/2010, 15h27
  4. Réponses: 2
    Dernier message: 02/03/2006, 11h57
  5. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40

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