Bonjour, supposons une requête qui renvoie trois colonnes
varchar | varchar | number
-------------------------
a1 | b1 | n1
a2 | b2 | n2
...
je souhaiterais avoir en sortie : n1 lignes (a1,b1), n2 lignes (a2,b2), ...
merci d'avance
Bonjour, supposons une requête qui renvoie trois colonnes
varchar | varchar | number
-------------------------
a1 | b1 | n1
a2 | b2 | n2
...
je souhaiterais avoir en sortie : n1 lignes (a1,b1), n2 lignes (a2,b2), ...
merci d'avance
éventuellement avec une clause MODEL
(merci de toujours préciser ta version)
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 create table t as select 'a1' a, 'b1' b, 2 n from dual union all select 'a2','b2',5 from dual; select a,b,y||'/'||n from t model partition by (a,b,n) dimension by(0 x) measures (n y) rules upsert ( y[for x from 1 to y[0]-1 increment 1]=cv(x) ) order by a,b,y;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 A B R -- -- ---- a1 b1 1/2 a1 b1 2/2 a2 b2 1/5 a2 b2 2/5 a2 b2 3/5 a2 b2 4/5 a2 b2 5/5
effectivement désolé, c'est la 8.1.7Envoyé par laurentschneider
j'ai trouvé que la clause MODEL est apparue avec la 10g... pas de chance pour le script
tu peux utiliser une table d'entiers.
il faut bien sûr mettre suffisament de lignes, ici 10'000. En fonction de ce que n peut être.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 create table t as select 'a1' a, 'b1' b, 2 n from dual union all select 'a2','b2',5 from dual; create table r(r number primary key); exec for i in 1..10000 loop insert into r(r) values (i); end loop commit;
ensuite c'est tout simple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 select a,b,r,n from t,r where t.n>=r.r; A B R N -- -- ---------- ---------- a1 b1 1 2 a1 b1 2 2 a2 b2 1 5 a2 b2 2 5 a2 b2 3 5 a2 b2 4 5 a2 b2 5 5
plus élégant mais non-testé en 8i
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 create or replace type t_number as TABLE OF number; / create or replace function f_number(n number) return t_number pipelined is begin for i in 1..n loop pipe row(i); end loop; return; end; / create table t as select 'a1' a, 'b1' b, 2 n from dual union all select 'a2','b2',5 from dual;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 select * from t,table(f_number(t.n)); A B N COLUMN_VALUE -- -- ---------- ------------ a1 b1 2 1 a1 b1 2 2 a2 b2 5 1 a2 b2 5 2 a2 b2 5 3 a2 b2 5 4 a2 b2 5 5
le bon vieux produit cartésienEnvoyé par laurentschneider
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager