Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/10/2011, 14h45   #1
Invité de passage
 
Inscription : septembre 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 18
Points : 3
Points : 3
Par défaut Alignement en colonnes d'un champ

Bonjour,

Code :
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
Jackola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 16h25   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 813
Points : 5 813
Cherchez pivot sur ce forum.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 03/11/2011, 11h25   #3
Invité de passage
 
Inscription : septembre 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 18
Points : 3
Points : 3
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 :
1
2
3
4
5
SELECT champs1,champs2 
FROM matable1,matable2 
WHERE ch2=champs1
GROUP BY champs1
PIVOT champs1;
Jackola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 15h55   #4
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

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

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Y-a-t-il un nombre constant de "champs2" pour une valeur donnée de "champs1" ?
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 16h39   #5
Invité de passage
 
Inscription : septembre 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 18
Points : 3
Points : 3
Bonjour
Non c'est complétement aléatoire.
Jackola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 13h43   #6
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
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 ?
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 14h19   #7
Invité de passage
 
Inscription : septembre 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 18
Points : 3
Points : 3
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 ?
Jackola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 15h00   #8
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

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

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Mettons que vous soyez en 11g ou en 10g

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

Code :
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 :
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 :
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
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 15h03   #9
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Ca passe déjà en 10g je pense.

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

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 15h25   #10
Invité de passage
 
Inscription : septembre 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 18
Points : 3
Points : 3
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 ?
Jackola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 15h30   #11
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
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 :
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;
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 15h51   #12
Invité de passage
 
Inscription : septembre 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 18
Points : 3
Points : 3
OK merci beaucoup ojo77 et Pacmann.
Jackola est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h45.


 
 
 
 
Partenaires

Hébergement Web