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 :

[Debutant] Aide sur jointure


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Debutant] Aide sur jointure
    Bonjour,

    J'ai une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select id,date,nombre
    from table1
    where date >= to_date('01/08/2010 00:00:00', 'dd/mm/yyyy HH24:MI:SS')
    and date < to_date('03/08/2010 00:00:00', 'dd/mm/yyyy HH24:MI:SS')
    qui retourne ce résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    id     date          nombre
    1      01/08/10      456    
    2      02/08/10      654
    J'aimerai comparer les nombres sur 2 années différentes et donc obtenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    id     date_2010  nombre_2010   date_2009   nombre_2009
    1      01/08/10   456           01/08/09    321
    2      02/08/10   654           02/08/09    563
    Ainsi je prends des donnes sur la meme table mais a des dates differentes et je souhaiterais les afficher tel que sur l'exemple juste ci dessus.
    J'utilise une BDD Oracle10g.

    D'avance merci.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Cette requête devrait donner un résultat correspondant à ton attente
    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
    SELECT  tb1.id
        ,   tb1.date    AS  date_2010
        ,   tb1.nombre  AS  nombre_2010
        ,   tb2.date    AS  date_2009
        ,   tb2.nombre  AS  nombre_2009
    FROM    (   SELECT  id
                    ,   date
                    ,   nombre
                FROM    table1
            )   AS  tb1
        INNER JOIN
            (   SELECT  id
                    ,   date
                    ,   nombre
                FROM    table1
            )   AS  tb2
            ON  tb1.date = tb2.date + INTERVAL 1 YEAR
    WHERE   tb1.date >= to_date('01/08/2010 00:00:00', 'dd/mm/yyyy HH24:MI:SS')
        AND tb1.date <  to_date('03/08/2010 00:00:00', 'dd/mm/yyyy HH24:MI:SS')
    ;
    Je suppose que tu nous as donné des noms de champ qui ne correspondent pas à la réalité de ta table, parce que c'est une très mauvaise idée de donner à tes objets des noms correspondant à des mots clés du langage (comme date pour une colonne)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci al1_24.
    J'ai effectivement simplifié la requête et changé le nom des champs.
    La syntaxe "inner join" semble ne pas fonctionner chez moi.
    J'utilise une base Oracle 10g et Toad 6.5.0.0

  4. #4
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Naabz Voir le message
    La syntaxe "inner join" semble ne pas fonctionner chez moi.
    C'est très étonnant vu que c'est la syntaxe normalisée des jointures depuis 1992 !
    J'utilise une base Oracle 10g et Toad 6.5.0.0
    Ne me dites pas que cette version, pas si ancienne, d'Oracle n'implémentait pas encore les JOIN ? !!

    Donne ta requête réelle et le message d'erreur que tu obtiens.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut Une autre approche
    Vous pouvez aussi obtenir un resultat similaire avec une approche différente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select id, to_char(M_date,'DD/MM') Le_Jour, sum(decode(to_char(M_date,'YYYY'),'2009',nombre,0)) As Nombre_2009 ,
                                                sum(decode(to_char(M_date,'YYYY'),'2010',nombre,0)) As Nombre_2010
    From table1
    Where ( M_date between to_date('01/08/2009','DD/MM/YYYY') and  to_date('03/08/2009','DD/MM/YYYY') Or   
            M_date between to_date('01/08/2010','DD/MM/YYYY') and  to_date('03/08/2010','DD/MM/YYYY') 
          )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ID,  LE_JOUR, NOMBRE_2009, NOMBRE_2010
    1 ,    01/08,     321,           456
    2,     02/08,     563,           654
    Signé : Capitaine Jean-Luc Picard

Discussions similaires

  1. [Debutant] Aide sur un code
    Par akatsuki1905 dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/10/2008, 07h52
  2. [MS Query] neophyte demande aide sur jointures SQL
    Par thorgal972 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 27/11/2006, 17h13
  3. Aide sur jointure externe
    Par viny dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/09/2006, 16h51
  4. [Débutant] Aide sur jointure
    Par chapron dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/08/2006, 23h00
  5. [Debutant] Aide sur une requete normée
    Par Wisefool dans le forum Oracle
    Réponses: 2
    Dernier message: 14/04/2006, 18h41

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