BI experience

UNION SQL tips

| 4 Commentaires

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.

4 Commentaires

  1. merci Emmanuel pour cette info précieuse!

  2. 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….

  3. Attention, au moins sous ORacle, un UNION « dédoublonne » les données, on peut donc en perdre. Préférer alors « UNION ALL ».

Laisser un commentaire

Champs Requis *.

*