Utiliser une requête Union pour combiner plusieurs requêtes dans un seul résultat

Utiliser une requête Union pour combiner plusieurs requêtes dans un seul résultat

Remarque :  Nous faisons de notre mieux pour vous fournir le contenu d’aide le plus récent aussi rapidement que possible dans votre langue. Cette page a été traduite automatiquement et peut donc contenir des erreurs grammaticales ou des imprécisions. Notre objectif est de faire en sorte que ce contenu vous soit utile. Pouvez-vous nous indiquer en bas de page si ces informations vous ont aidé ? Voici l’article en anglais à des fins de référence aisée.

Parfois, vous souhaiterez peut-être répertorier les enregistrements d’une table ou requête avec celles d’une ou plusieurs autres tables pour former un jeu d’enregistrements - une liste avec tous les enregistrements des tables deux ou plusieurs. Il s’agit de l’objectif d’une requête union dans Access.

Pour bien comprendre les requêtes union, vous devez tout d’abord être familiarisé concevoir des requêtes sélection de base dans Access. Pour plus d’informations sur la création de requêtes sélection, voir créer une requête sélection simple.

Remarque : Le contenu de cet article est destiné à utiliser avec les bases de données de bureau Access. Vous ne pouvez pas créer ou utiliser une requête union dans les bases de données web Access ou des applications web Access.

Étudier un exemple de requête union pratique

Si vous n’avez jamais créé une requête union avant, il peut utile vers l’étude de première un exemple pratique dans le modèle Access Les Comptoirs. Vous pouvez rechercher l’exemple de modèle Northwind sur la page de démarrage d’Access en cliquant sur fichier > Nouveau ou vous pouvez télécharger directement une copie à partir de cet emplacement : exemple de modèle de Northwind.

Une fois Access ouvre la base de données Northwind, effacez le formulaire de boîte de dialogue de connexion qui apparaît tout d’abord, puis développez le volet de Navigation. Cliquez sur la partie supérieure du volet de Navigation, puis sélectionnez le Type d’objet pour organiser tous les objets de base de données selon leur type. Ensuite, développez le groupe requêtes, et vous verrez une requête appelée Transactions relatives aux produits.

Requêtes Union sont faciles à différencier d’autres objets requête parce qu’ils ont une icône spéciale qui ressemble à deux cercles entrelacés représentant un jeu united de deux jeux :

Capture d’écran d’une icône de requête union dans Access.

Contrairement à sélection normale et requêtes action, les tableaux ne sont pas liées dans une requête union, ce qui signifie que le niveau d’accès concepteur de requêtes graphique ne peuvent pas être utilisé pour créer ou modifier des requêtes union. Vous serez confronté si vous ouvrez une requête union à partir du volet de Navigation ; Access ouvre et afficher les résultats en mode feuille de données. Sous la commande affichages sous l’onglet accueil, vous remarquerez que Mode Création n’est pas disponible lorsque vous travaillez avec les requêtes union. Vous pouvez uniquement basculer entre L’affichage feuille de données et Mode SQL lorsque vous travaillez avec les requêtes union.

Pour continuer l’étude de cet exemple de requête union, cliquez sur accueil > affichage > Mode SQL pour afficher la syntaxe SQL qui le définit. Dans cette illustration, nous avons ajouté des espaces supplémentaires dans l’instruction SQL afin que vous puissiez voir facilement les différentes parties qui composent une requête union.

Exemple d’une requête union en mode SQL visuel à partir du modèle Northwind exemple Access.

Nous allons étudier la syntaxe SQL de cette requête union à partir de la base de données Northwind en détail :

SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

La première et les troisième parties de cette instruction SQL sont essentiellement de deux requêtes sélection. Ces requêtes extraient deux différents jeux d’enregistrements ; une à partir de la table Orders produit et un à partir de la table des Achats de produit .

La deuxième partie de cette instruction SQL est le mot-clé UNION qui indique à Access que cette requête combine ces deux jeux d’enregistrements.

La dernière partie de cette instruction SQL détermine l’ordre des enregistrements combinées à l’aide d’une instruction ORDER BY . Dans cet exemple, Access classe tous les enregistrements en fonction du champ Date de commande dans l’ordre décroissant.

Remarque : Requêtes Union sont toujours en lecture seule dans Access ; Vous ne pouvez pas modifier toutes les valeurs en mode feuille de données.

Créer une requête union en créant et en combinant les requêtes sélection

Même si vous pouvez créer une requête union en écrivant directement la syntaxe SQL en mode SQL, vous trouverez plus faciles à créer dans composants aux requêtes sélection. Vous pouvez puis copiez et collez les parties SQL dans une requête union combinée.

Si vous voulez ignorer les étapes de lecture et regarder à la place un exemple, consultez la section suivante, regardez un exemple de la création d’une requête union.

  1. Sous l’onglet Créer, dans le groupe Requêtes, cliquez sur Création de requête.

  2. Dans la boîte de dialogue Afficher la table, double-cliquez sur la table comprenant les champs que vous voulez inclure. La table est ajoutée à la fenêtre de création de la requête.

  3. Fermez la boîte de dialogue Afficher la table.

  4. Dans la fenêtre de création de requête, double-cliquez sur chacun des champs que vous souhaitez inclure. Lorsque vous sélectionnez les champs, assurez-vous que vous ajoutez le même nombre de champs, dans le même ordre, que vous ajoutez aux autres requêtes sélection. Vérifiez attentivement aux types de données des champs et vérifiez qu’ils ont des types de données compatibles avec les champs dans la même position dans les autres requêtes que vous voulez combiner. Par exemple, si votre première requête sélection comporte cinq champs, le premier d'entre eux contient des données de date/heure, assurez-vous que chacun des autres requêtes sélection que vous voulez combiner a également cinq champs, le premier d'entre eux contient des données de date/heure, et ainsi de suite.

  5. Vous pouvez également ajouter des critères à vos champs en tapant les expressions appropriées dans la ligne critères de la grille des champs.

  6. Une fois que vous avez terminé d’ajouter les champs et critères de champs, vous devez exécuter la requête sélection et vérifier le résultat. Sous l’onglet Création, dans le groupe résultats, cliquez sur exécuter.

  7. Basculez la requête en mode Création.

  8. Enregistrez la requête Sélection et laissez-la ouverte.

  9. Répétez cette procédure pour chacune des requêtes Sélection à combiner.

À présent que vous avez créé vos requêtes sélection, il est temps pour les combiner. Dans cette étape, vous créez la requête union en copiant et en collant les instructions SQL.

  1. Sous l’onglet Créer, dans le groupe Requêtes, cliquez sur Création de requête.

  2. Fermez la boîte de dialogue Afficher la table.

  3. Sous l’onglet Création, dans le groupe requête, cliquez sur Union. Access masque la fenêtre de création de requête et affiche l’onglet objet du mode SQL. À ce stade, l’onglet d’objet SQL vue est vide.

  4. Cliquez sur l’onglet de la première requête Sélection à combiner à la requête Union.

  5. Sous l’onglet accueil, cliquez sur affichage > Mode SQL.

  6. Copier l’instruction SQL pour la requête sélection. Cliquez sur l’onglet correspondant à la requête union que vous avez commencé à créer plus haut.

  7. Collez l’instruction SQL pour la requête Sélection dans l’onglet Mode SQL de l’objet de la requête Union.

  8. Supprimez le point-virgule (;) à la fin de l’instruction SQL de la requête Sélection.

  9. Appuyez sur ENTRÉE pour déplacer le curseur vers le bas d’une ligne, puis tapez UNION sur la nouvelle ligne.

  10. Cliquez sur l’onglet de la requête Sélection suivante à combiner à la requête Union.

  11. Répétez les étapes 5 à 10 jusqu’à ce que toutes les instructions SQL pour les requêtes Sélection aient été copiées-collées dans la fenêtre Mode SQL de la requête Union. Ne supprimez pas le point-virgule ou ne tapez rien à la suite de l’instruction SQL de la dernière requête Sélection.

  12. Sous l’onglet Créer, dans le groupe Résultats, cliquez sur Exécuter.

Les résultats de votre requête union apparaissent en mode feuille de données.

Regarder un exemple de la création d’une requête union

Voici un exemple que vous pouvez recréer dans la base de données exemple Northwind. Cette requête union collecte les noms des personnes à partir de la table clients et les associe les noms des personnes à partir de la table fournisseurs . Si vous voulez suivre, parcourez ces étapes dans votre copie de la base de données exemple Northwind.

Exemple visuel de la création d’une requête union dans le modèle Northwind exemple Access.

Voici les étapes nécessaires pour créer cet exemple :

  1. Créez deux requêtes sélection appelées Requête1 et requête2 avec les tables clients et produits respectivement en tant que sources de données. Utilisez des champs Prénom et nom de famille comme valeurs d’affichage.

  2. Créez une requête appelée Query3 sans source de données initiale, puis sur la commande Union sous l’onglet Création pour rendre cette requête dans une requête Union.

  3. Copiez et collez les instructions SQL de Requête1 et requête2 dans Query3. Veillez à supprimer le point-virgule supplémentaire et l’ajouter dans le mot-clé UNION. Vous pouvez ensuite vérifier vos résultats en mode feuille de données.

  4. Ajoutez dans une clause de classement dans un des requêtes et collez l’instruction ORDER BY dans la requête union mode SQL. Notez que dans Query3, la requête union, lorsque l’ordre est sur le point d’être ajouté, tout d’abord les points-virgules sont supprimés, puis le nom de table dans les noms de champs.

  5. L’instruction SQL final qui combine et trie les noms de cet exemple de requête union est la suivante :

    SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
    FROM Customers
    
    UNION
    
    SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
    FROM Suppliers
    
    ORDER BY [Last Name], [First Name];

Si vous maîtrisez très écrire la syntaxe SQL, vous pouvez certainement écrivez votre propre SQL instruction de la requête union directement dans SQL permet d’afficher. Toutefois, vous trouverez utile pour le suivi de l’approche de copie et collage SQL à partir d’autres objets de la requête. Chaque requête peut être beaucoup plus complexe que les exemples de requête sélection simple utilisés ici. Il peut être à votre avantage pour créer et tester chaque requête avec soin avant de les associer la requête union. Si la requête union ne s’exécute, vous pouvez ajuster individuellement chaque requête jusqu'à ce qu’il a réussi et puis reconstruire votre requête union avec la syntaxe de la corrigé.

Passez en revue les sections restantes de cet article pour en savoir plus de conseils et astuces sur l’utilisation de requêtes union.

Dans l’exemple de la section précédente à l’aide de la base de données Northwind, seules les données de deux tables sont combinées. Cependant, vous pouvez combiner les trois tables ou plus facilement dans une requête union. Par exemple, s’appuyant sur l’exemple précédent, vous souhaiterez peut-être également inclure les noms des employés dans le résultat de la requête. Vous pouvez effectuer cette tâche en ajoutant une requête tiers et en combinaison avec l’instruction SQL précédente avec un mot clé UNION supplémentaire à ceci :

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Lorsque vous affichez le résultat en mode feuille de données, tous les employés apparaîtront avec le nom de société exemple, qui n’est probablement pas très utile. Si vous souhaitez que ce champ pour indiquer si une personne est un employé interne, à partir d’un fournisseur, ou d’un client, vous pouvez inclure une valeur fixe à la place du nom de la société. Voici comment donnera l’instruction SQL :

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Voici comment le résultat s’affiche en mode feuille de données. Access affiche ces enregistrements cinq exemple :

Emploi

Nom

Prénom

Internes

Hébert

Joséphine

Internes

Giussani

Elisabeth

Fournisseur

Glasson

Stuart

Client

Goldschmidt

Michel

Client

Gratacos Solsona

Antonio

La requête ci-dessus peut être réduite encore plus loin dans la mesure où Access lit uniquement les noms des champs de sortie à partir de la première requête dans une requête union. Vous trouverez que nous avons supprimé la sortie des sections de deuxième et troisième requête :

SELECT "Customer" As Employment, [Last Name], [First Name]
FROM Customers

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers

UNION

SELECT "In-house", [Last Name], [First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Dans une requête union Access, classement est autorisé qu’une seule fois, mais chaque requête peut être filtrée individuellement. Se basant sur requête union de la section précédente, Voici un exemple dans lequel nous avons filtré de chaque requête en ajoutant une clause WHERE.

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
WHERE [State/Province] = "UT"

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
WHERE [Job Title] = "Sales Manager"

UNION

SELECT "In-house", Employees.[Last Name], Employees.[First Name]
FROM Employees
WHERE City = "Seattle"

ORDER BY [Last Name], [First Name];

Passer à la feuille de données mode et vous verrez résultats similaires à ceci :

Emploi

Nom

Prénom

Fournisseur

Andersen

Elizabeth A.

Internes

Hébert

Joséphine

Client

Hasselberg

Jonas

Internes

Brasseur

Danielle

Fournisseur

Hernandez Echevarria

Amaya

Client

Mortensen

Sven

Fournisseur

Sandberg

Mikael

Fournisseur

Sousa

Luis

Internes

Charron

Sébastien

Fournisseur

Weiler

Micheline

Internes

Belisle

Gerard

Si les requêtes à union sont très différents, vous pouvez rencontrer une situation où un champ de sortie doit combiner les données de différents types de données. Si Oui, la requête union souvent renverra les résultats en tant que type de données texte étant donné que ce type de données peut contenir les deux nombres et du texte.

Pour mieux comprendre comment cela fonctionne, nous allons utiliser la requête union Transactions relatives aux produits dans la base de données exemple Northwind. Ouvrez cette base de données exemple, puis ouvrez la requête transactions relatives aux produits en mode feuille de données. Les dix dernières enregistrements doivent être semblables à ce résultat :

ID de produit

Date de commande

Nom de la société

Mouvement

Quantité

77

1/22/2006

Fournisseur B

Achat

60

80

1/22/2006

Fournisseur D

Achat

75

81

1/22/2006

Fournisseur A

Achat

125

81

1/22/2006

Fournisseur A

Achat

200

7

20/1/2006

Société D

Vente

10

51

20/1/2006

Société D

Vente

10

80

20/1/2006

Société D

Vente

10

34

15/1/2006

Société AA

Vente

100

80

15/1/2006

Société AA

Vente

30

Supposons que vous voulez le fractionnement de champ Quantité en deux - acquisition et vente. Supposons également que vous souhaitez effectuer un fixe zéro valeur pour le champ aucune valeur. Voici à quoi le code SQL pour cette requête union :

SELECT [Product ID], [Order Date], [Company Name], [Transaction], 0 As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, 0 As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC; 

Si vous passez en mode feuille de données, vous verrez les dix dernières enregistrements affichés désormais comme suit :

ID de produit

Date de commande

Nom de la société

Mouvement

Acheter

Vendre

74

1/22/2006

Fournisseur B

Achat

20

0

77

1/22/2006

Fournisseur B

Achat

60

0

80

1/22/2006

Fournisseur D

Achat

75

0

81

1/22/2006

Fournisseur A

Achat

125

0

81

1/22/2006

Fournisseur A

Achat

200

0

7

20/1/2006

Société D

Vente

0

10

51

20/1/2006

Société D

Vente

0

10

80

20/1/2006

Société D

Vente

0

10

34

15/1/2006

Société AA

Vente

0

100

80

15/1/2006

Société AA

Vente

0

30

Poursuivre cet exemple, que se passe-t-il si vous voulez que les champs avec zéro pour être vide ? Vous pouvez modifier le code SQL pour afficher rien, au lieu de zéro en ajoutant le mot clé Null comme suit :

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Cependant, comme vous avez peut-être observé passer en mode feuille de données, vous avez maintenant un résultat inattendu. Dans la colonne acheter, chaque champ est désactivée :

ID de produit

Date de commande

Nom de la société

Mouvement

Acheter

Vendre

74

1/22/2006

Fournisseur B

Achat

77

1/22/2006

Fournisseur B

Achat

80

1/22/2006

Fournisseur D

Achat

81

1/22/2006

Fournisseur A

Achat

81

1/22/2006

Fournisseur A

Achat

7

20/1/2006

Société D

Vente

10

51

20/1/2006

Société D

Vente

10

80

20/1/2006

Société D

Vente

10

34

15/1/2006

Société AA

Vente

100

80

15/1/2006

Société AA

Vente

30

Cela est dû est, car Access détermine les types de données des champs de la première requête. Dans cet exemple, Null n’est pas un nombre.

Que se passe-t-il si vous essayez et insérez une chaîne vide pour la valeur vide de champs ? Le code SQL pour cette tentative peut se présenter comme suit :

SELECT [Product ID], [Order Date], [Company Name], [Transaction], "" As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, "" As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Lorsque vous basculez en mode feuille de données, vous verrez qu’Access récupère les valeurs acheter, mais il converti les valeurs en texte. Vous pouvez déterminer qu'il s’agit des valeurs de texte dans la mesure où ils sont alignés à gauche dans l’affichage feuille de données. Une chaîne vide dans la première requête n’est pas un nombre qui explique pourquoi vous voyez ces résultats. Vous pouvez également constater que les valeurs vendre sont également convertis en texte, car les enregistrements d’achat contiennent une chaîne vide.

ID de produit

Date de commande

Nom de la société

Mouvement

Acheter

Vendre

74

1/22/2006

Fournisseur B

Achat

20

77

1/22/2006

Fournisseur B

Achat

60

80

1/22/2006

Fournisseur D

Achat

75

81

1/22/2006

Fournisseur A

Achat

125

81

1/22/2006

Fournisseur A

Achat

200

7

20/1/2006

Société D

Vente

10

51

20/1/2006

Société D

Vente

10

80

20/1/2006

Société D

Vente

10

34

15/1/2006

Société AA

Vente

100

80

15/1/2006

Société AA

Vente

30

Comment pour résoudre ce puzzle ?

Une solution consiste à forcer la requête va-t-il se passer de la valeur du champ doit être un nombre. Cela peut être effectué avec l’expression :

IIf(False, 0, Null)

La condition à vérifier, faux, aura jamais la valeur True, et donc l’expression retourne toujours Null, mais Access toujours évalue les deux options de sortie et décide la sortie numérique ou la valeur Null.

Voici comment nous pouvons utiliser cette expression dans notre exemple :

SELECT [Product ID], [Order Date], [Company Name], [Transaction], IIf(False, 0, Null) As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Notez qu’il n’est pas nécessaire modifier la deuxième requête.

Si vous passez en mode feuille de données, vous verrez maintenant un résultat qui nous voulons :

ID de produit

Date de commande

Nom de la société

Mouvement

Acheter

Vendre

74

1/22/2006

Fournisseur B

Achat

20

77

1/22/2006

Fournisseur B

Achat

60

80

1/22/2006

Fournisseur D

Achat

75

81

1/22/2006

Fournisseur A

Achat

125

81

1/22/2006

Fournisseur A

Achat

200

7

20/1/2006

Société D

Vente

10

51

20/1/2006

Société D

Vente

10

80

20/1/2006

Société D

Vente

10

34

15/1/2006

Société AA

Vente

100

80

15/1/2006

Société AA

Vente

30

Une autre méthode pour obtenir le même résultat consiste à faire précéder les requêtes dans la requête union avec une autre requête :

SELECT 
    0 As [Product ID], Date() As [Order Date], 
    "" As [Company Name], "" As [Transaction], 
    0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

Pour chaque champ, Access renvoie des valeurs fixes du type de données que vous définissez. Bien entendu, vous ne voulez pas le résultat de cette requête interférer avec les résultats de la sorte l’astuce pour éviter que consiste à inclure une clause WHERE pour faux :

WHERE False

Voici une astuce étant donné que ce n’est toujours false et la requête ne rien retourne. Combinaison de cette déclaration avec l’instruction SQL existant et nous arrivent à une instruction finale comme suit :

SELECT 
    0 As [Product ID], Date() As [Order Date], 
    "" As [Company Name], "" As [Transaction], 
    0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

UNION

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Remarque : La requête combinée ici dans cet exemple à l’aide de la base de données Northwind renvoie 100 enregistrements, tandis que les deux requêtes individuels renvoient des enregistrements 58 et 43 pour un total de 101 enregistrements. La raison de cette différence est car deux enregistrements ne sont pas uniques. Consultez la section utilisation des enregistrements distincts dans les requêtes union utilisant UNION ALL, pour savoir comment résoudre ce scénario à l’aide de UNION ALL.

Il est un cas particulier d’une requête union pour combiner un jeu d’enregistrements avec un seul enregistrement qui contient la somme d’un ou plusieurs champs.

Voici un autre exemple que vous pouvez créer dans la base de données Northwind exemple montrer comment obtenir un total dans une requête union.

  1. Créez une requête simple pour afficher l’achat de bières (Réf produit = 34 dans la base de données Northwind) à l’aide de la syntaxe SQL suivante :

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
  2. Passer à la feuille de données mode et vous devez voir quatre achats :

    Date de réception

    Quantité

    1/22/2006

    100

    1/22/2006

    60

    4/4/2006

    50

    4/5/2006

    300

  3. Pour obtenir le total, créer une requête agrégation simple à l’aide de l’instruction SQL suivante :

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Passer à la feuille de données mode et vous devez voir un seul enregistrement :

    MaxOfDate reçu

    SommeDeQuantité

    4/5/2006

    510

  5. Combiner ces deux requêtes dans une requête union pour ajouter l’enregistrement avec la quantité totale pour les enregistrements d’achat :

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    UNION
    
    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
  6. Passer à la feuille de données mode et vous devez voir les quatre achats avec la somme de chaque suivi d’un enregistrement qui totalise la quantité :

    Date de réception

    Quantité

    1/22/2006

    60

    1/22/2006

    100

    4/4/2006

    50

    4/5/2006

    300

    4/5/2006

    510

Qui couvre les notions de base de l’ajout de totaux dans une requête union. Vous souhaiterez également inclure des valeurs fixes dans les deux requêtes tels que « De détail » et « Total » pour séparer visuellement l’enregistrement total à partir des autres enregistrements. Vous pouvez consulter à l’aide de valeurs fixes dans la section combiner plusieurs tables ou requêtes dans une requête union.

Les requêtes Union dans Access par défaut inclure uniquement les enregistrements distincts. Mais que se passe-t-il si vous souhaitez inclure tous les enregistrements ? Un autre exemple peut être utile ici.

Dans la section précédente, que nous vous montrer comment créer un total dans une requête union. Modifier cette requête union SQL afin d’inclure l’ID de produit = 48 :

SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION

SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Purchase Order Details].[Date Received];

Passer à la feuille de données mode et vous devez voir un résultat sensiblement confusion :

Date de réception

Quantité

1/22/2006

100

1/22/2006

200

Un seul enregistrement bien entendu ne renvoie à deux reprises la quantité au total.

La raison pour laquelle que vous voyez ce résultat est parce que sur une journée la même quantité de chocolat a été vendue à deux reprises - comme vous les avez enregistrés dans la table Détails commande achat. Voici un résultat de la requête sélection simple montrant les deux enregistrements dans la base de données exemple Northwind :

Réf bon de commande

Product

Quantity

100

Northwind Traders chocolat

100

92

Northwind Traders chocolat

100

Dans la requête union indiquée précédemment, vous constatez que le champ Réf bon de commande n’est pas inclus et que les deux champs ne constituent deux enregistrements distincts.

Si vous voulez inclure tous les enregistrements, utilisez UNION ALL au lieu d’UNION dans votre SQL. Cela aura principalement probablement un impact sur le tri des résultats, vous souhaiterez peut-être également inclure une clause ORDER BY pour déterminer un ordre de tri. Voici la construction SQL modifiée désactiver l’exemple précédent :

SELECT [Purchase Order Details].[Date Received], Null As [Total], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION ALL

SELECT Max([Date Received]), "Total" As [Total], Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Total];

Passer à la feuille de données mode et vous devez voir tous les détails outre un total en tant que le dernier enregistrement :

Date de réception

Total

Quantité

1/22/2006

100

1/22/2006

100

1/22/2006

Total

200

Une utilisation d’une requête union doit servir de la source d’enregistrement d’un contrôle de zone de liste déroulante d’un formulaire. Vous pouvez utiliser cette zone de liste déroulante pour sélectionner une valeur pour filtrer les enregistrements du formulaire. Filtrage par exemple, les enregistrements des employés en leur ville.

Pour voir comment cela pourrait fonctionner, Voici un autre exemple que vous pouvez créer dans la base de données exemple Northwind afin d’illustrer ce scénario.

  1. Créer une requête sélection simple à l’aide de cette syntaxe SQL :

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Passer à la feuille de données mode et vous devez voir les résultats suivants :

    Ville

    Filtrer

    Seattle

    Seattle

    Bellevue

    Bellevue

    Redmond

    Redmond

    Kirkland

    Kirkland

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

  3. Examiner les résultats, vous ne verrez pas un grand nombre de valeur. Développez bien que la requête et transformer celles-ci à une requête union à l’aide de l’instruction SQL suivante :

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Passer à la feuille de données mode et vous devez voir les résultats suivants :

    Ville

    Filtrer

    < tous >

    *

    Bellevue

    Bellevue

    Kirkland

    Kirkland

    Redmond

    Redmond

    Seattle

    Seattle

    Access effectue une union des neuf enregistrements, précédemment affichée, avec les valeurs de champs de longueur fixe de < tous > et « * ».

    Étant donné que cette clause union n’est pas UNION ALL, Access renvoie uniquement les enregistrements distincts ce qui signifie que chaque ville est renvoyé une seule fois avec des valeurs fixes identiques.

  5. Maintenant que vous avez une requête union finale affichant chaque nom de la ville qu’une seule fois, ainsi que d’une option qui efficacement sélectionne toutes les villes, vous pouvez utiliser cette requête comme source d’enregistrement pour une zone de liste déroulante d’un formulaire. À l’aide de cet exemple spécifique en tant que modèle, vous pouvez créer un contrôle de zone de liste déroulante sur un formulaire, définir cette requête comme source d’enregistrement, définissez la propriété de largeur de colonne de la colonne de filtre à 0 (zéro) pour masquer visuellement et définissez la propriété colonne liée à 1 pour indiquer l’index la deuxième colonne. Dans la propriété filtre d’un formulaire lui-même, vous pouvez ensuite ajouter dans le code comme suit pour activer un filtre de formulaire à l’aide de la valeur de ce qui a été sélectionné dans le contrôle de zone de liste déroulante :

    Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'"
    Me.FilterOn = True

    L’utilisateur du formulaire ensuite filtrer les enregistrements de formulaire à un nom de ville spécifique ou < tous > Sélectionner pour répertorier tous les enregistrements pour toutes les villes.

Haut de la Page

Développez vos compétences dans Office
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoignez le programme Office Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×