Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

UNION : ordre de calcul et/ou d'affichage

3 réponses
Avatar
le Nordiste
Bonjour tertous,

J'ai une requ=EAte UNION : MaRequete_1 UNION MaRequete_2

MaRequete_1 fait la synth=E9se d'une table,
MaRequete_2 fait les totaux par champ de MaRequete_2

J'ai syst=E9matiquement mes totaux en 1=E9re ligne du r=E9sultat, que je
fasse
MaRequete_1 UNION MaRequete_2 ou MaRequete_2 UNION MaRequete_1.

Il me semblait que SQL traitait dans l'ordre de lecture les requ=EAtes.

Merci pour votre aide

3 réponses

Avatar
3stone
Salut,

le Nordiste wrote:
J'ai une requête UNION : MaRequete_1 UNION MaRequete_2

MaRequete_1 fait la synthése d'une table,
MaRequete_2 fait les totaux par champ de MaRequete_2

J'ai systématiquement mes totaux en 1ére ligne du résultat, que je
fasse
MaRequete_1 UNION MaRequete_2 ou MaRequete_2 UNION MaRequete_1.

Il me semblait que SQL traitait dans l'ordre de lecture les requêtes.




Pour une requête UNION, il faut le même nombre et le même type
de champs pour que cela fonctionne...

S'il faut un tri, tu ne pourras l'appliqué que sur la totalité des
enregistrements retournés.
Donc, impossible de faire quelque chose comme:
Select * From table1 Orderby a
UNION
Select * from table2 Orderby b

Mais, on peut parfois contourner en créant un champ
calculé dans chaque requête, du style:

Select 0 As Toto, c1, c2 From table1
union
Select 1 As Toto, c1, c2 from table2 orderby Toto

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
le Nordiste
Merci 3stone,

Tes explications m'ont éclairé sur une solution possible ;
mais mon Pb du moment n'est pas résolu pour autant:

J'ai bien :
Pour une requête UNION, il faut le même nombre et le même type
de champs pour que cela fonctionne...



mais j'ai systématiquement ma ligne TOTAL en 1ére ligne du résultat
quelquesoit l'ordre des deux requêtes.

Comment faire pour que le résultat de "MaRequete_1 UNION MaRequete_2 "
donne sur dans l'ordre vertical :

le résultat de MaRequete_1
et dessous
le résultat deMaRequete_2


Merc i de consacrer ton temps à mes petits soucis.
Avatar
3stone
Salut,

le Nordiste wrote:
Tes explications m'ont éclairé sur une solution possible ;
mais mon Pb du moment n'est pas résolu pour autant:

J'ai bien :
Pour une requête UNION, il faut le même nombre et le même type
de champs pour que cela fonctionne...



mais j'ai systématiquement ma ligne TOTAL en 1ére ligne du résultat
quelquesoit l'ordre des deux requêtes.

Comment faire pour que le résultat de "MaRequete_1 UNION MaRequete_2 "
donne sur dans l'ordre vertical :

le résultat de MaRequete_1
et dessous
le résultat deMaRequete_2




Tu dis: "ma ligne TOTAL"

Une des requête est une requête regroupement et ne te ramène
qu'une seule ligne ?
Si oui, intègre un champ calculé comme expliqué avant
et sur lequel tu peux trier.
Tu peux éventuellement trier sur un second champ pour garder
un certain ordre dans la seconde requête en utilisant ceci:
http://www.3stone.be/access/articles.php?lng=fr&pg9" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://www.3stone.be/access/articles.php?lng=fr&pg9
- le tout risque éventuelement de devenir un peu lent...

Ceci dit, je me demande si tu n'essaies pas de reproduire
ce que l'on obtient très facilement dans un état ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)