Pour un tableau avec les colonnes A et B, sélectionnez * dans le tableau rendra
A B
A1 B1
A2 B2
A3 B3
Existe-t-il un moyen d'interroger sur ceci afin que l'ensemble de résultats soit comme ceci -
Fusionné
A1
B1
A2
B2
A3
B3
Appréciez toutes les suggestions :)
4 Réponses :
Une union avec un peu de piquant supplémentaire pour déterminer la commande fonctionnerait:
SELECT col FROM ( SELECT 'A' as colname, row_number() OVER (ORDER BY A) as colrow, A as col FROM table UNION ALL SELECT 'B' as colname, row_number() OVER (ORDER BY B) as colrow, B as col FROM table ) sub ORDER BY colrow, colname
Parfait! Non autorisé à marquer accepté pendant 8 minutes supplémentaires, mais oui, l'ordre n'a d'importance que dans le tuple. Merci
Jointure gauche simple et casse quand le fera:
SELECT CASE WHEN T1.A = LEAD(T1.A) OVER (ORDER BY T1.A) THEN T1.A ELSE T1.B END Merged FROM MYTABLE T1 LEFT JOIN MYTABLE T2 ON T1.A <> T2.A;
Result
Essayez ceci:
SELECT a, rownum*2 as r FROM table UNION ALL SELECT b, (rownum*2)+1 FROM table ORDER BY r
Vous devrez peut-être les transformer en sous-requêtes et les classer par a / b - il n'était pas vraiment clair si vos données d'exemple étaient triées ou si vous êtes satisfait pour avoir juste l'ordre naturel tant qu'ils sont entrelacés
Vous en manquez un dans la clause. Aussi, comment supprimer r de l'ensemble de résultats? Et comment le commander pour être | A1 | B1 | ...? Merci pour votre réponse. Acclamations!
Supprimez R en enveloppant le tout dans une autre sélection et en ne le sélectionnant pas. Ce n'est généralement pas trop important de le faire, car vous pouvez garder la requête épurée et simplement ne pas utiliser la colonne R dans (par exemple) le frontal
Je n'ai pas mis de tri sur A1 B1 car ce n'était pas nécessairement le cas que ce soit de vraies données (cela ressemble à de fausses données). S'il s'agit de données réelles et qu'elles doivent trier de cette façon, alors le tri des requêtes avant qu'elles ne soient réunies sera acceptable (le rownum sera alors généré dans cet ordre)
Merci pour les commentaires, je voulais juste pointer vers la sortie de l'opération souhaitée mais le commentaire est utile, je crois.
J'écrirais ceci comme suit:
select merged from ((select a as merged, a as ordcol, 1 as which from t ) union all (select b, a, 2 from t ) ) t order by ordcol, which;
Les fonctions de fenêtre ne sont pas nécessaires pour cela.