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 :

Compilation de deux tables


Sujet :

SQL Oracle

  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1
    Par défaut Compilation de deux tables
    Bonjour,
    voilà mon problème :
    j'ai 2 tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Table1
    Produit  Date_début  Date_fin     Prix
    A          1.1.2008     31.3.2008   15
    A          1.4.2008     30.6.2008   17
    B          1.7.2008     31.12.2008  16
     
    Table2
    Code     Date_Debut   Date_Fin       Reduction
    1          1.1.2007     31.7.2008       5
    1          1.8.2008     31.8.2008       4
    2          1.9.2008     31.12.2009      5
    et je voudrais obtenir une table dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Date_début   Date_fin    Produit   Code
    1.1.2007      31.12.2007    null      1
    1.1.2008      31.3.2008      A        1
    1.4.2008      30.06.2008     A        1
    1.7.2008      31.8.2008      B        1
    1.9.2008      31.12.2008     B        2
    1.1.2009      31.12.2009    null      2
    Si quelqu'un peut m'aider !!! Merci

  2. #2
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Bonjour,

    Citation Envoyé par margot74
    et je voudrais obtenir une table dans le genre :
    Merci de nous donner une description exacte et détaillée du besoin.


    Cordialement,

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Effectivement ça manque un peu de précision notamment sur la logique d'agrégat des périodes.
    Néanmoins en utilisant un calendrier, ça se construit assez bien (requête 11gR2, il faudra probablement adapter les CTE si vous travaillez avec une version antérieure) :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    With Table1 (Produit, Date_debut, Date_fin, Prix) as
    (
    select 'A', to_date('01.01.2008', 'dd.mm.yyyy'), to_date('31.03.2008', 'dd.mm.yyyy'), 15 from dual union all
    select 'A', to_date('01.04.2008', 'dd.mm.yyyy'), to_date('30.06.2008', 'dd.mm.yyyy'), 17 from dual union all
    select 'B', to_date('01.07.2008', 'dd.mm.yyyy'), to_date('31.12.2008', 'dd.mm.yyyy'), 16 from dual
    )
      ,  Table2 (Code, Date_Debut, Date_Fin, Reduction) as
    (
    select 1, to_date('01.01.2007', 'dd.mm.yyyy'), to_date('31.07.2008', 'dd.mm.yyyy'), 5 from dual union all
    select 1, to_date('01.08.2008', 'dd.mm.yyyy'), to_date('31.08.2008', 'dd.mm.yyyy'), 4 from dual union all
    select 2, to_date('01.09.2008', 'dd.mm.yyyy'), to_date('31.12.2009', 'dd.mm.yyyy'), 5 from dual
    )
      ,  t1 as
    (
    select Produit, Date_debut, Date_fin, Prix, rownum as rn from Table1
    )
      ,  t2 as
    (
    select Code, Date_Debut, Date_Fin, Reduction, rownum as rn from Table2
    )
        select min(cal.cal_jour) as Date_Debut
             , max(cal.cal_jour) as Date_Fin
             , t1.Produit, t2.Code
          from v_calendrier cal
     left join t1 on cal.cal_jour between t1.Date_debut and t1.Date_fin
     left join t2 on cal.cal_jour between t2.Date_debut and t2.Date_fin
         where t1.Produit is not null
            or t2.Code    is not null
      group by t1.Produit, t2.Code, t1.rn
      order by min(cal.cal_jour) asc;
     
     
    DATE_DEBUT DATE_FIN   PRODUIT CODE
    ---------- ---------- ------- ----
    01.01.2007 31.12.2007  -         1
    01.01.2008 31.03.2008  A         1
    01.04.2008 30.06.2008  A         1
    01.07.2008 31.08.2008  B         1
    01.09.2008 31.12.2008  B         2
    01.01.2009 31.12.2009  -         2

Discussions similaires

  1. [MySQL] compiler deux tables
    Par vivi21 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/07/2011, 16h27
  2. comment lier deux tables?????
    Par baboune dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/03/2004, 14h45
  3. [Débutant] Union de deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/03/2004, 10h40
  4. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53
  5. regrouper deux tables
    Par Shabata dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2003, 15h02

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