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

Langage SQL Discussion :

[Oracle 9i] Traitement SQL sur une table


Sujet :

Langage SQL

  1. #1
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut [Oracle 9i] Traitement SQL sur une table
    Bonjour,

    Voici mon problème :

    j'ai la table suivante :
    date-------------note
    17/02/03---------A
    22/01/03---------B
    26/07/02---------C
    13/03/00---------D
    28/01/98---------E


    J'aimerais obtenir la table suivante (nouvelle table à la rigueur)

    17/02/03----A-----17/02/03-----A
    17/02/03----A-----22/01/03-----B
    17/02/03----A-----26/07/02-----C
    17/02/03----A-----13/03/00-----D
    17/02/03----A-----28/01/98-----E
    17/02/03----A-----Null----------Null

    22/01/03----B-----22/01/03-----B
    22/01/03----B-----26/07/02-----C
    22/01/03----B-----13/03/00-----D
    22/01/03----B-----28/01/98-----E
    22/01/03----B-----Null----------Null

    26/07/02----C-----26/07/02-----C
    26/07/02----C-----13/03/00-----D
    26/07/02----C-----28/01/98-----E
    26/07/02----C-----Null----------Null

    Et ainsi de suite pour chaque date.

    Avez vous des pistes ? Pour info je travaille en Oracle 9i. Je connais un peu PL/SQL.

    Merci bcp!

  2. #2
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut
    Voici le code pour créer la date et les enregistrements

    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
     
    create table RDT_FS_HISTO_MO
    (
      C_RMPM_CODE            VARCHAR2(18),
      C_RATING_AGENCY_ISSUER VARCHAR2(18),
      D_RATING_DATE          DATE,
      C_CURRENT_RATING       VARCHAR2(12),
      C_CURRENCY_TYPE_CODE   VARCHAR2(10),
      C_TERM_CODE            VARCHAR2(10)
    );
     
    insert into RDT_FS_HISTO_MO (C_RMPM_CODE, C_RATING_AGENCY_ISSUER, D_RATING_DATE, C_CURRENT_RATING, C_CURRENCY_TYPE_CODE, C_TERM_CODE)
    values (null, '0000002145', to_date('26-07-2002', 'dd-mm-yyyy'), 'A1', 'FC', 'LT');
    insert into RDT_FS_HISTO_MO (C_RMPM_CODE, C_RATING_AGENCY_ISSUER, D_RATING_DATE, C_CURRENT_RATING, C_CURRENCY_TYPE_CODE, C_TERM_CODE)
    values (null, '0000002145', to_date('22-01-2003', 'dd-mm-yyyy'), 'A3', 'FC', 'LT');
    insert into RDT_FS_HISTO_MO (C_RMPM_CODE, C_RATING_AGENCY_ISSUER, D_RATING_DATE, C_CURRENT_RATING, C_CURRENCY_TYPE_CODE, C_TERM_CODE)
    values (null, '0000002145', to_date('13-03-2000', 'dd-mm-yyyy'), 'Aa3', 'FC', 'LT');
    insert into RDT_FS_HISTO_MO (C_RMPM_CODE, C_RATING_AGENCY_ISSUER, D_RATING_DATE, C_CURRENT_RATING, C_CURRENCY_TYPE_CODE, C_TERM_CODE)
    values (null, '0000002145', to_date('17-02-2003', 'dd-mm-yyyy'), 'WR', 'FC', 'LT');
    insert into RDT_FS_HISTO_MO (C_RMPM_CODE, C_RATING_AGENCY_ISSUER, D_RATING_DATE, C_CURRENT_RATING, C_CURRENCY_TYPE_CODE, C_TERM_CODE)
    values (null, '0000002145', to_date('28-01-1998', 'dd-mm-yyyy'), 'Aa2', 'FC', 'LT');
    commit;

  3. #3
    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
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT a.Date, a.Note, b.Date, b.Note
    FROM laTable a LEFT JOIN (SELECT Date, Note
                              FROM laTable
                            UNION 
                              SELECT Null, Null
                              FROM DUAL) b
                        ON a.Date >= nvl(b.Date, '01/01/0001')
    ORDER BY a.Date DESC, b.Date DESC

  4. #4
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut
    Rien à dire... hormi un immense MERCI !!
    Cela fonctionne parfaitement. On comprend bien l'intitulé "expert confirmé" sous ton pseudo.

    Merci encore !

  5. #5
    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
    Citation Envoyé par Requin15
    un immense MERCI !!
    Pas de quoi, c'est un plaisir de rendre service
    Citation Envoyé par Requin15
    On comprend bien l'intitulé "expert confirmé" sous ton pseudo.
    En fait cela veut seulement dire que je suis bavard ...

  6. #6
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut
    Bavard, ok, mais pas pour dire des bêtises ;-)

  7. #7
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut
    Hum.. je viens de tester davantage cette requête, et je n'avais pas pris un paramètre un compte:

    plus précisémment ma table source est ainsi:
    TRUC------17/02/03---------A
    TRUC------22/01/03---------B
    TRUC------26/07/02---------C
    TRUC------13/03/00---------D
    TRUC------28/01/98---------E
    TRUC2-----18/05/02---------A
    TRUC2-----24/04/01---------B
    TRUC2-----06/04/00---------F
    TRUC2-----23/12/00---------G
    TRUC2-----21/05/98---------I


    et le soucis avec le résultat de la solution proposée, c'est que toutes les dates sont mélangées et ne tiennent pas compte du champ TRUC, ou TRUC2... Et pour cause, je n'en avais pas parlé.

    Mais en effet, plusieurs dates correspondent à une entité, et celles-ci ne doivent pas être mélangées entre elle.

    Si vous avez une solution, je suis preneur.

    Merci pour tout.

  8. #8
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut
    J'ai rajouté une clause where, mais malheureusement la ligne Null Null dont j'avais besoin a disparu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT a.Date, a.Note, b.Date, b.Note
    FROM laTable a LEFT JOIN (SELECT Date, Note, IDENTIFIANT
                              FROM laTable
                            UNION 
                              SELECT Null, Null, Null
                              FROM DUAL) b
                        ON a.Date >= nvl(b.Date, '01/01/0001')
                        WHERE a.IDENTIFIANT=b.IDENTIFIANT
    ORDER BY a.Date DESC, b.Date DESC

  9. #9
    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
    C'est parce qu'il ne faut pas mettre ta condition dans le WHERE, mais dans la jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT a.Date, a.Note, b.Date, b.Note
    FROM laTable a LEFT JOIN (SELECT Date, Note, IDENTIFIANT
                              FROM laTable
                            UNION 
                              SELECT Null, Null, Null
                              FROM DUAL) b
                        ON a.Date >= nvl(b.Date, '01/01/0001')
                        AND a.IDENTIFIANT=b.IDENTIFIANT
    ORDER BY a.Date DESC, b.Date DESC

  10. #10
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut
    Tu n'as que changé WHERE par AND ?
    En tout cas, le résultat est le même, les lignes Null Null ont disparues

  11. #11
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut
    Voilà c'est bon ! Comme quoi, une bonne nuit de sommeil, ça aide!

    Voici la requête idéale pour moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT a.Date, a.Note, b.Date, b.Note
    FROM laTable a LEFT JOIN (SELECT Date, Note, IDENTIFIANT
                              FROM laTable
                            UNION 
                              SELECT Null, Null, c.IDENTIFIANT
                              FROM DUAL, laTable c) b
                        ON a.Date >= nvl(b.Date, '01/01/0001')
                        AND a.IDENTIFIANT=b.IDENTIFIANT
    ORDER BY a.Date DESC, b.Date DESC
    Merci bcp pour ton aide en tout cas!

  12. #12
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par Médiat
    En fait cela veut seulement dire que je suis bavard ...
    Non pas seulement, les gens trop bavard mais qui n'apporte aucune réponse voit leur rang modifié en des valeurs plus explicites en "grand bavard", "débutant", etc...

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

Discussions similaires

  1. 2 Requete sql sur une Table
    Par melongourmand dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 15/03/2013, 14h25
  2. Réponses: 18
    Dernier message: 30/01/2012, 18h41
  3. [WD16] Faire une requête SQL sur une table ?
    Par EriCstoFF dans le forum WinDev
    Réponses: 9
    Dernier message: 01/09/2011, 10h16
  4. Requete SQL sur une table dont le nom est dans une autre table
    Par orangepresse dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/09/2007, 13h32
  5. Réponses: 4
    Dernier message: 27/12/2006, 21h53

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