1
votes

Déplacer les colonnes en lignes

Je dois ajouter la troisième colonne à la première colonne (mon souhait est que la première colonne inclue également la troisième colonne)

État actuel:

État actuel

Résultats souhaités:

désir


1 commentaires

Je vous conseillerais d'inclure tout code que vous avez essayé dans votre question. Vous augmenterez les chances de recevoir de l'aide et réduirez les chances que votre question soit signalée et supprimée.


4 Réponses :


4
votes

Vous voulez UNION ALL :

SELECT t.entity, t.activity
FROM table t
UNION ALL
SELECT t.entity2, t.activity2
FROM table t;


0 commentaires

1
votes
select entity, activity from <table>
union all
select entity_2, activity_2 from <table>

0 commentaires

2
votes

Si vous avez beaucoup de données, vous ne voudrez peut-être pas analyser la table plusieurs fois - ce que fait union all .

À la place:

select t.entity, s.activity
from t cross join lateral
     (select t.entity, t.activity from dual union all
      select t.entity_2, t.activity_2 from dual 
     ) s;

Dans Oracle 12C +, cela est simplifié à l'aide de jointures latérales:

select (case when n.n = 1 then entity
             when n.n = 2 then entity_2
        end) as entity,
       (case when n.n = 1 then activity
             when n.n = 2 then activity_2
        end) as activity
from t cross join
     (select 1 as n from dual union all
      select 2 as n from dual
     ) n;


2 commentaires

La curiosité a tué le chat; J'ai créé une table avec 40018 lignes et la réponse union all a pris 1,52 seconde, 579 obtentions cohérentes, votre premier exemple de jointure croisée a fait un MERGE JOIN CARTESIAN mais n'a pris que 1,13 seconde et 99 obtentions, et la jointure croisée latérale a fait une vue en ligne, 1,41 seconde, 480 obtentions!


@MarkStewart. . . Wow! Intéressant. Oracle n'a pas fait du bon travail en implémentant des jointures latérales.



0
votes

en général:

select col1,col2 from table1
union all
select col3,col4 form table1;


0 commentaires