2013-01-16 1 views
0

ci-dessous est l'obligation d'être acheived dans PL/SQL-UNPIVOT sur plusieurs colonnes pour retourner plusieurs colonnes

Le format de table est

CREATE TABLE NETWORK_TABLE (ORIG_CODE NUMBER, ORIG_SV NUMBER, DEST_CODE NUMBER, DEST_SV NUMBER) 

échantillon de données -

INSERT INTO network_table VALUES (14, 1, 15, 1); 

INSERT INTO network_table VALUES (18, 4, 11, 1); 

INSERT INTO network_table VALUES (15, 1, 22, 3); 

INSERT INTO network_table VALUES (23, 2, 21, 1); 

INSERT INTO network_table VALUES (14, 3, 11, 1); 

INSERT INTO network_table VALUES (12, 2, 22, 2); 

Tableau des données ressemble à -

Orig_r orig_sv dest_r dest_sv 
    14  1  15  1 
    12  2  22  2 
    18  4  11  1 
    15  1  22  3 
    14  3  11  1 

Maintenant, je veux obtenir la sortie comme ci-dessous -

ROOT SV 
14 1 
15 1 
12 2 
22 2 
18 4 
11 1 
15 1 
22 3 
14 3 
1 1 

Comment puis-je acheive cela? Apprécions vos commentaires

Répondre

2

comme ceci:

SQL> select * from network_table; 

ORIG_CODE ORIG_SV DEST_CODE DEST_SV 
---------- ---------- ---------- ---------- 
     14   1   15   1 
     12   2   22   2 
     18   4   11   1 
     15   1   22   3 
     14   3   11   1 

SQL> select case name when 'ORIG_SV' then orig_code else dest_code end code, val 
    2 from network_table 
    3 unpivot (val for name in (orig_sv, dest_sv)); 

     CODE  VAL 
---------- ---------- 
     14   1 
     15   1 
     12   2 
     22   2 
     18   4 
     11   1 
     15   1 
     22   3 
     14   3 
     11   1 

ou 10g et ci-dessous:

SQL> select case r when 1 then orig_code else dest_code end code, 
    2   case r when 1 then orig_sv else dest_sv end val 
    3 from network_table, (select rownum r from dual connect by level <= 2) 
    4/

     CODE  VAL 
---------- ---------- 
     14   1 
     12   2 
     18   4 
     15   1 
     14   3 
     15   1 
     22   2 
     11   1 
     22   3 
     11   1 
+0

Parfait! Merci – Silpa

0

Vous pouvez utiliser un UNION ALL pour transformer les données des colonnes en lignes .:

select ORIG_CODE Root, ORIG_SV SV 
from network_table 
union all 
select DEST_CODE, DEST_SV 
from network_table 
order by root 

Voir SQL Fiddle with Demo

Le UNION ALL laissera des valeurs en double. Si vous voulez supprimer les doublons, vous pouvez utiliser UNION

+0

Merci! Cela peut-il être réalisé en utilisant UNPIVOT? Je me demandais .. – Silpa