Requête UNION

Comment regrouper le contenu de 2 tables (ou plus) pour l’afficher sous forme d’une seule liste ?

Le problème

Imaginons que vous avez une table de tblClients avec un champ Raison sociale. Vous avez également une table tblFournisseurs qui comporte un champ équivalent (il peut s’appeler Raison sociale, ou autrement, mais contient en principe le même genre d’informations). Et vous souhaitez afficher une liste combinée des clients et des fournisseurs.

La solution : une requête UNION

  1. Créez une nouvelle requête graphique.
  2. Cliquez sur l’icône Affichage (en haut à gauche de votre écran), et choisissez l’option SQL.
  3. En mode SQL, tapez une requête SQL qui extrait des données des 2 tables en utilisant la clause UNION. Ce qui donne :

Variante

Par défaut, seuls les lignes différentes seront affichées. Ca veut dire que, si un client et un fournisseur ont la même raison sociale, une seule ligne de résultat apparaît pour les deux. Si vous souhaitez afficher toutes les lignes, avec les doublons, remplacez UNION par UNION ALL. Ce qui donne :

Vous aimerez aussi...

7 réponses

  1. Moha OULHAJ dit :

    Salut Mr hervé je sollicite votre aide à résoudre un problème dans le code ci-après :
    Private Sub Commande24_Click()
    Dim rqt As String
    Dim msg As String
    Dim numF As String

    ‘Conditions de mise à jour
    numF = Me.[N°F_Achat]

    ‘Message de confirmation
    msg = MsgBox(« Voulez vous valider Cette facture ? », vbQuestion + vbYesNo, « Nouveau produit »)

    ‘ analyse de la réponse et éxécution de la requete si la réponse est Oui

    If msg = 6 Then
    DoCmd.RunSQL (« UPDATE Achats SET validée = Yes WHERE [N°F_Achat] = » + numF)
    Else
    Exit Sub
    End If
    End Sub
    le problème existe au niveau de type de la valeur du champ de la clause Where : numF = Me.[N°F_Achat] qui revoit la valeur suivante : « FA.15.07/00001 » qui ne n’est pas compatyble avec le champ N°F_Achat de la table qui est de type texte. merci d’avance.

    • Hervé Inisan dit :

      Si [N°F_Achat] et numF sont de type Texte, il faut écrire :

  2. Hervé Inisan dit :

    HILALI_LAHCEN > Tu veux « empiler » les lignes des 2 tables (les unes sous les autres), ou les juxtaposer (les données de T_Entrée à gauche de T_Sortie) ?

    Dans le premier cas, il s’agit bien d’une requête UNION comme dans l’article plus haut. Dans le 2ème cas, il faut créer une requête en sélectionnant les 2 tables, puis en les joignant à la souris sur le champ de date.

  3. HILALI_LAHCEN dit :

    bonjour,
    j’ai deux tables nomées T_entrée(Date_etrée;Produit;Qté_prdt) et T_Sortie(Date_sortie;Produit;Qté_prdt), je voudrai créer requete qui permet d’afficher toutes les champs avec un champ commun au niveau des dates.

  4. régis dit :

    Okay c’est bon sa marche je vous remercie de votre réponse précise et concise, le site est trés clair aussi, bravo!

  5. Hervé Inisan dit :

    Je vois sur la capture que tu as activé l’option SQL Direct. C’est elle qui provoque un appel ODBC, et donc la recherche d’une source de données ODBC. « SQL Direct » ne veut pas dire « taper directement une requête SQL », mais « exécuter une instruction SQL en direct sur une source ODBC ».

    Ce que tu dois plutôt faire :

    1. Activer l’onglet Créer du ruban.
    2. Cliquer sur l’icône Création de requête.
    3. Fermer la boîte Afficher la table.
    4. Utiliser l’icône Affichage (tout à gauche du ruban) pour passer en mode SQL (et ne pas activer SQL Direct).

    Ensuite, utilise l’icône Affichage pour basculer entre les modes.
    Ouala !

  6. regis dit :

    Je n’arrive pas a exécuter une requete en mode sql sur access 2007 professionnel, quand je veux l’exécuter on me demande de
    sélectionner les sources de données, que dois je configurer, je mets un screen pour que ce soit plus clair.

    http://img258.imageshack.us/my.php?…
    si quelqu’un pourrait me debloquer ce serait vraiment sympa!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *