En temps normal, la fonction SQL UNION est utilisée pour avoir l’ensemble des possibilités présentes dans 2 ensembles différents
exemple :
table1
Objet | devFr | montantFr | devMar | montantMar | devUSA | montantUSA |
---|---|---|---|---|---|---|
réveil | Euros | 30 | Dirhams | 300 | Dollards | 25 |
montre | Euros | 50 | Dirhams | 500 | Dollards | 45 |
ordinateur | Euros | 5000 | Dirhams | 50000 | Dollards | 4500 |
table2
Objet | devFr | montantFr | devMar | montantMar | devUSA | montantUSA |
---|---|---|---|---|---|---|
collier | Euros | 30 | Dirhams | 300 | Dollards | 25 |
bague | Euros | 50 | Dirhams | 500 | Dollards | 45 |
bracelet | Euros | 5000 | Dirhams | 50000 | Dollards | 4500 |
/************************Exemple de requête*****/
SELECT Objet FROM table1
UNION
SELECT Objet FROM table2
/*****************************/
Résultat
Objet |
---|
réveil |
montre |
ordinateur |
collier |
bague |
bracelet |
Donc à part cette fonctionnalité, l’UNION peut servir, grossièrement, à transformer les colonnes en lignes.
Exemple sur la table1
SELECT Objet, devFr as devise, montantFr as montant FROM table1
UNION
SELECT Objet, devMar as devise, montantMar as montant FROM table1
UNION
SELECT Objet, devUSA as devise, montantUSA as montant FROM table1
Résultat
Objet | devise | montant |
---|---|---|
collier | Euros | 30 |
montre | Euros | 50 |
ordinateur | Euros | 500 |
collier | Dirhams | 300 |
montre | Dirhams | 500 |
ordinateur | Dirhams | 5000 |
collier | Dollards | 25 |
montre | Dollards | 45 |
ordinateur | Dollards | 4500 |
Ce type de tips peut vraiment être utile à certaines occasions.
9 juin 2009 à 13 h 34 min
On peut également utiliser l’instruction Pivot …
http://www.pckult.net/tutoriaux/117-sql/1486-pivoter-les-donnees-avec-pivot-de-microsoft-sql-server-2005
9 juin 2009 à 21 h 56 min
merci Emmanuel pour cette info précieuse!
25 juin 2009 à 14 h 09 min
Attention les unions peuvent être assez gourmands en temps.
Il existe d’autre manière de faire des pivots et transposition de données en pur SQL ensembliste.
Pour passer des colonnes en lignes, il suffit généralement de faire « un produit cartésien contrôlé ».
Exemple, je veux passer 12 colonnes contenant le CA de chaque mois (CAm1… CAm12) en ligne sous la forme « CA », « Mois ».
Il suffit de faire un produit cartésien avec une table contenant 12 lignes numérotées de 1 à 12, puis de faire un joli case when (ou decode pour les anciens) afin de ventiler les données…
C’est simple et très très performant et se fait une seule passe sur les données. A conseiller sur les gros volumes de données…
Contactez moi sur le site de Stambia si vous souhaitez plus de détail sur l’opération inverse (lignes en colonnes) par exemple….
1 septembre 2009 à 13 h 45 min
Attention, au moins sous ORacle, un UNION « dédoublonne » les données, on peut donc en perdre. Préférer alors « UNION ALL ».