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

Oracle Discussion :

[ORACLE 9i] Avoir 12 lignes pour 12 mois de chaque années


Sujet :

Oracle

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 75
    Points
    75
    Par défaut [ORACLE 9i] Avoir 12 lignes pour 12 mois de chaque années
    Bonjour,

    Je me permet de poster sur ce forum pour un problème de requete SQL.
    Je dois réaliser une vue qui me pose des problèmes.

    Les explications :
    J'ai une table PARAMETER qui contient les mois (01-02-...-12) et leurs textes (Janvier-Février-...-Décembre).

    J'ai une table OT qui contient des données.
    A l'intérieur, j'ai un champ DATE_FIN.

    Ma vue doit contenir tous les mois, pour toutes les années et faire un compte d'enregistrement.

    Le soucis est que j'ai réussi a obtenir tous les mois en faisant une jointure externe et en rajoutant dans le on la condition "and to_char(date_fin, 'YYYY') = '2000'".

    Mais je souhaite avec 12 mois pour chaque années.

    J'ai pensé a créer une table Annees contenant toutes les années de 1970 à 2100 mais cette solution me parait ridicule.

    Quelqu'un a déjà t'il été confronté a ce problème et / ou a une idée pour la résolution de mon problème ?

    Merci beaucoup
    Worldofdada

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Est-ce que tu veux tous les mois de chaque année pour lesquelles il y a au moins un enregistrement, ou tous les mois de toutes les années entre deux bornes ?
    Si c'est le deuxième cas, la création d'une table avec toutes les années est obligatoire...sauf si ta version le permet (ne marche pas avec toutes les 9i)

    Tu ajoutes à ta requête une jointure externe sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ROWNUM + 1969
    FROM DUAL
    CONNECT BY ROWNUM <= 30

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    Il me faudrait, au mieux tous les mois de toutes les années meme s'il n'y a pas forcemment d'enregistrement.
    Si ce n'est pas possible, avoir tous les mois de chaque année où il y a au minimum un enregistrement serait déjà bien.

    Je ne vais pas pouvoir tester ta solution aujoud'hui mais demain sans faute.

    Merci
    Worldofdada

  4. #4
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Cela devrait t'aider
    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 OT as (
    select 1 num, to_date('01/01/1990') datefin from dual union
    select 2 num, to_date('01/07/1990') from dual union
    select 3 num, to_date('01/12/2000') from dual union
    select 4 num, to_date('01/12/2005') from dual union
    select 5 num, to_date('01/12/2005') from dual), 
    annee as (select distinct extract (year from datefin) annee from OT),
    mois as (select '01' num,'Janvier' lettre from dual union
             select '10','Octobre' from dual union
             select '11','Novembre' from dual union
             select '12','Décembre' from dual union
             select '02','Février'from dual union
             select '03','Mars'from dual union
             select '04','Avril'from dual union
             select '05','Mai'from dual union
             select '06','Juin'from dual union
             select '07','Juillet'from dual union
             select '08','Août'from dual union
             select '09','Septembre'from dual),
    annee_mois as (select num, lettre, annee from mois, annee)
    select distinct d.num||'/'||d.annee, count(ot.num)
    from annee_mois d, ot 
    where d.num||'/'||d.annee = to_char(ot.datefin(+),'MM/YYYY')
    group by d.num||'/'||d.annee
    order by d.num||'/'||d.annee
    OT est une représentation de ta table OT.
    Anne est une table des années faite suivant les années présente dans la table OT sur la champ datefin(on suppose que toute les années à gérée sont présente)
    mois est ta table mois
    et annee_mois est une simulation de tous les mois de toutes les années (nous permet uns joitnure ouverte plus tard)

    Ensuite la requete est assez simple, pour chaque Mois/Année du réferenciel (table annee_mois) je recherche les ots de la table OT (même ceux qui n'existe pas (+) joiture externe) et je fais un count sur les OTs.

    Voilà cela devrait fonctionner

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 132
    Points : 75
    Points
    75
    Par défaut
    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/08/2014, 08h29
  2. Réponses: 2
    Dernier message: 18/02/2007, 21h30
  3. [SQL - ORACLE] Requete un peu compliquée (pour moi)
    Par Worldofdada dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/11/2005, 08h25
  4. Instruction pour avoir 1 ligne au lieu de 2
    Par senacle dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/06/2005, 14h11

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