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 :

Alignement en colonnes d'un champ


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut Alignement en colonnes d'un champ
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select champs1,champs2 from matable1,matable2 where ch2=champs1
    La requete ci dessus me donne sous excel le résultat suivant :

    Colonne A - Colonne B
    Champs1 - Champs2
    0 - 10
    0 - 20
    1 - 30
    1 - 40

    Je souhaite que le résultat aligne les champs2 en colonne :

    Colonne A - Colonne B - Colonne C
    Champs1 - Champs2a - Champs2b
    0 - 10 - 20
    1 - 30 - 40

    Merci d'avance pour votre aide

  2. #2
    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
    Cherchez pivot sur ce forum.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut Alignement en colonnes d'un champ
    Bonjour,
    J'ai cherché à pivot sur ce forum mais je ne m'en sors pas.

    Pouvez vous me dire si je suis dans la bonne direction avec le code ci dessous ?

    J'ai l'impression que je dois utiliser la fonction TRANSFORM mais j'ai un message d'erreur.

    Merci d'avance

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT champs1,champs2 
    FROM matable1,matable2 
    WHERE ch2=champs1
    GROUP by champs1
    PIVOT champs1;

  4. #4
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Y-a-t-il un nombre constant de "champs2" pour une valeur donnée de "champs1" ?

  5. #5
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Bonjour
    Non c'est complétement aléatoire.

  6. #6
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Un nombre maximal alors ? Un typage ou une règle qui permet de savoir dans quel ordre tu les mets dans les colonnes ?

    Et sinon, pourquoi as-tu besoin de cela ?

  7. #7
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Salut!

    Pas de nombre maximal, mais historiquement ca n'a pas dépassé 20 champs2 par champs1.

    J'ai besoin de ça pour pouvoir dans excel concaténer les champs2 dans 1 cellule en faisant une recherchev sur le champs1.

    En tapant le champs1 dans une cellule, je voudrais concaténer les champs2 dans une autre cellule. Dans mon exemple, si je tape "1", je dois avoir "30;40". Si je tape "0", je dois avoir "10;20".

    J'ai posté une discussion sur le forum excel pour le faire directement via excel. Je pensais que ça se ferait facilement via sql et que c'est plus "propre"... mais je suis preneur pour une solution excel.

    C'est faisable via sql ?

  8. #8
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Mettons que vous soyez en 11g ou en 10g

    Je crée une table qui ressemble à la votre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create table Jackola ( C1 number, C2 number );
     
    insert into Jackola values ( 0, 1 );
    insert into Jackola values ( 0, 6 );
    insert into Jackola values ( 0, 2 );
    insert into Jackola values ( 0, 3 );
    insert into Jackola values ( 0, 5 );
    insert into Jackola values ( 1, 0 );
    insert into Jackola values ( 1, 7 );
    insert into Jackola values ( 1, 9 );
     
    commit;

    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
    create view vj
    as select c1, c2, row_number() over (partition by c1 order by c2) c3 
    from Jackola ;
     
    select * from vj
    /
     
            C1         C2         C3
    ---------- ---------- ----------
             0          1          1
             0          2          2
             0          3          3
             0          5          4
             0          6          5
             1          0          1
             1          7          2
             1          9          3
    Je requête ensuite de la façon suivante :

    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 C1,champs
    from
    (
      select *
      from   vj
      model  
      dimension  by (C1, C3)
      measures ( C2, cast( null as varchar2(25)  ) champs, count(*) over (partition by C1) counter )
      rules
      (
        champs[any, any] order by c3 = champs[cv(c1), cv(c3)-1]  ||C2[cv(c1), cv(c3)]||' '  
      )
    )
    where counter=c3
    order by c1;   
     
            C1 CHAMPS
    ---------- -------------------------
             0 1 2 3 5 6
             1 0 7 9

  9. #9
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Ca passe déjà en 10g je pense.

    Sinon, une liste quasi exhaustive des possibilités :
    http://www.oracle-base.com/articles/...Techniques.php

  10. #10
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Merci à tous pour vos réponses.

    J'ai le message d'erreur suivant

    Create view vj
    ORA-01031: insufficient privileges

    J'utilise ça au boulot. C'est une histoire de droit d'accès ? Est ce que je peux contourner ça ?

  11. #11
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Tout à fait, tu n'as pas le droit de créer des vues... mais tu n'en as pas besoin.

    La vue a été créée par ojo77 pour simplifier le code.

    Prend la requête définition de la vue et substitue la directement dans la requête finale et ça va marcher :

    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
     
    SELECT C1,champs
    FROM
    (
      SELECT *
      FROM   (SELECT c1, c2, row_number() over (partition BY c1 ORDER BY c2) c3 
              FROM Jackola) vj
      model  
      dimension  BY (C1, C3)
      measures ( C2, cast( NULL AS varchar2(25)  ) champs, count(*) over (partition BY C1) counter )
      rules
      (
        champs[any, any] ORDER BY c3 = champs[cv(c1), cv(c3)-1]  ||C2[cv(c1), cv(c3)]||' '  
      )
    )
    WHERE counter=c3
    ORDER BY c1;

  12. #12
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    OK merci beaucoup ojo77 et Pacmann.

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

Discussions similaires

  1. problème alignement de colonnes d'un tableau
    Par freija dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/08/2006, 15h34
  2. Alignement de Colonnes d'une TStringGrid
    Par BigMike dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/06/2006, 10h22
  3. alignement de colonnes sur un select
    Par jeanpaul702 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/05/2006, 11h08
  4. [CR9]Masquer des données (colonnes) suivant valeur champ
    Par neo.51 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 05/09/2005, 09h43
  5. Alignement de colonne d'un tableau
    Par G_Kill dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 05/04/2005, 21h17

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