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 12/08/2011, 16h52   #1
Nouveau Membre du Club
 
Avatar de H.ile
 
Architecte de système d'information
Inscription : janvier 2008
Messages : 107
Détails du profil
Informations personnelles :
Âge : 32
Localisation : Macao

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : janvier 2008
Messages : 107
Points : 37
Points : 37
Par défaut [Oracle 10g]Transformer les éléments d'une liste en enregistrement

Aloha
Je dispose d'une table avec des enregistrements type :
Code :
1
2
Chp1|Chp2
"A,B,C,D"|"Blabla"
Comment faire pour avoir comme enregistrements, la transposition :
Code :
1
2
3
4
Chp1|Chp2
A|Blabla
B|Blabla
...
Sachant que je peux avoir 1, 2, ou X membres dans mon Chp1
D'avance, merci,
H.ile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 21h37   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Regarde oracle split varchar pour plus d'infos
Code :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
SQL> SET echo ON
SQL> SET linesize 200
SQL> SET pagesize 100
SQL> COLUMN list_c1 format A5
SQL> 
SQL> DROP TABLE t
  2  /
 
TABLE dropped.
 
SQL> CREATE TABLE t (c1 varchar2(20), c2 varchar2(20))
  2  /
 
TABLE created.
 
SQL> INSERT INTO t VALUES ('A,B,C,D','Blabla');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('E,F,G','Blibli');
 
1 row created.
 
SQL> INSERT INTO t VALUES ('K,M,O,P,T,R','Blublu');
 
1 row created.
 
SQL> commit
  2  /
 
Commit complete.
 
SQL> SELECT t.c2, x.column_value AS list_c1
  2    FROM t
  3   CROSS JOIN TABLE(
  4                cast(multiset(
  5                         SELECT substr( ','||c1||',',
  6                                        instr( ','||c1||',', ',', 1, rownum )+1,
  7                                        instr( ','||c1||',', ',', 1, rownum+1 )
  8                                               -instr( ','||c1||',', ',', 1, rownum )-1
  9                                       )
 10                           FROM dual
 11                        connect BY level <= length(c1)-length(REPLACE(c1,',',''))+1
 12                              ) AS sys.odcivarchar2list )
 13                      ) x
 14  /
 
C2                   LIST_
-------------------- -----
Blabla               A
Blabla               B
Blabla               C
Blabla               D
Blibli               E
Blibli               F
Blibli               G
Blublu               K
Blublu               M
Blublu               O
Blublu               P
Blublu               T
Blublu               R
 
13 rows selected.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h39.


 
 
 
 
Partenaires

Hébergement Web