Usar una consulta de unión para combinar varias consultas en un mismo resultado
Applies ToAccess para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

A veces, puede que quiera mostrar una lista de los registros de una tabla o consulta con los de una o más tablas para formar un conjunto de registros: una lista con todos los registros de dos o más tablas. Esta es la finalidad de una consulta de unión en Access.

Para comprender correctamente las consultas de unión, primero necesita familiarizarse con el diseño de consultas de selección básicas en Access. Para obtener más información sobre cómo diseñar consultas de selección, vea Crear una consulta de selección sencilla.

Estudiar un ejemplo práctico de consulta de unión

Si nunca creó una consulta de unión, puede que le resulte útil estudiar primero un ejemplo práctico en la plantilla de Access de Northwind. Puede buscar la plantilla de ejemplo de Northwind en la página de tareas iniciales de Access (para hacerlo, haga clic en Archivo > Nuevo), o bien puede descargar directamente una copia desde esta ubicación: Plantilla de ejemplo de Northwind.

Después de abrir la base de datos de Northwind en Access, cierre el cuadro de diálogo de inicio de sesión que se muestra por primera vez y, después, expanda el panel de navegación. Haga clic en la parte superior del panel de navegación y, después, seleccione Tipo de objeto para organizar por tipo todos los objetos de la base de datos. Después, expanda el grupo Consultas y verá una consulta llamada Transacciones de productos.

Las consultas de unión pueden diferenciarse fácilmente de otros objetos de consulta porque tienen un icono especial que es similar a dos círculos entrelazados que representan un conjunto combinado a partir de dos conjuntos:

Captura de pantalla de un icono de consulta de unión en Access.

Al contrario que las consultas normales de selección y acción, en una consulta de unión, las tablas no están relacionadas, por lo que no se puede usar el Diseñador de consultas gráfico de Access para crear o editar consultas de unión. Para probar esto, abra una consulta de unión desde el panel de navegación; Access mostrará los resultados en la vista Hoja de datos. En la pestaña Inicio, debajo del comando Vistas, verá que la vista Diseño no está disponible al trabajar con consultas de unión. Solo puede cambiar entre la vista Hoja de datos y la vista SQL al trabajar con consultas de unión.

Para seguir estudiando este ejemplo de consulta de unión, haga clic en Inicio > Vistas > Vista SQL para ver la sintaxis SQL que define la consulta. En esta ilustración, agregamos espacio adicional en las instrucciones SQL para que pueda ver fácilmente las distintas partes que componen una consulta de unión.

Su explorador no admite vídeo. Instale Microsoft Silverlight, Adobe Flash Player o Internet Explorer 9.

Estudiemos con detalle la sintaxis SQL de esta consulta de unión de la base de datos de Northwind:

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;

Las partes primera y tercera de esta instrucción SQL son básicamente dos consultas de selección. Estas consultas recuperan dos conjuntos de registros: uno de la tabla Pedidos de producto y otro de la tabla Compras de producto.

La segunda parte de esta instrucción SQL es la palabra clave UNION, que le indica a Access que esta consulta combinará los dos conjuntos de registros.

La última parte de la instrucción SQL determina el orden de los registros combinados con la instrucción ORDER BY. En este ejemplo, Access mostrará en orden descendente todos los registros por el campo Fecha de pedido.

Nota: Las consultas de unión siempre son de solo lectura en Access; no se pueden modificar los valores en la vista Hoja de datos.

Crear y combinar consultas de selección para crear una consulta de unión

Aunque puede crear una consulta de unión si escribe directamente la sintaxis SQL en la vista SQL, puede que le resulte más fácil crearla por partes con consultas de selección. Después, puede copiar y pegar las partes de la instrucción SQL en una consulta de unión combinada.

Si prefiere dejar de leer los pasos y ver un ejemplo en su lugar, vaya a la sección siguiente, Ver un ejemplo de creación de una consulta de unión.

  1. En el grupo Consultas de la pestaña Crear, haga clic en Diseño de la consulta.

  2. Haga doble clic en la tabla que contiene los campos que desea incluir. La tabla se agrega a la ventana de diseño de la consulta.

  3. En la ventana de diseño de la consulta, haga doble clic en cada uno de los campos que quiera incluir. Al seleccionar campos, procure agregar el mismo número de campos y en el mismo orden que a las otras consultas de selección. Preste especial atención a los tipos de datos de los campos y asegúrese de que son compatibles con los tipos de datos de los campos en la misma posición de las otras consultas que está combinando. Por ejemplo, si la primera consulta de selección tiene cinco campos y el primer campo contiene datos de fecha y hora, asegúrese de que las demás consultas de selección que está combinando también tienen cinco campos y que el primero contiene datos de fecha y hora, y así sucesivamente.

  4. También puede agregar criterios a los campos si escribe las expresiones correspondientes en la fila Criterios de la cuadrícula de campos.

  5. Cuando haya acabado de agregar campos y criterios de campo, debe ejecutar la consulta de selección y revisar su resultado. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

  6. Cambie la consulta a la vista Diseño.

  7. Guarde la consulta de selección y déjela abierta.

  8. Repita este procedimiento para cada una de las consultas de selección que desee combinar.

Después de crear las consultas de selección, es el momento de combinarlas. En este paso, copiará y pegará las instrucciones SQL para crear la consulta de unión.

  1. En el grupo Consultas de la pestaña Crear, haga clic en Diseño de la consulta.

  2. En la pestaña Diseño, en el grupo Consulta, haga clic en Unión. Access ocultará la ventana del diseño de consulta y mostrará la ficha del objeto de vista SQL. En este momento, la ficha del objeto de vista SQL estará vacío.

  3. Haga clic en la pestaña de la primera consulta de selección que desee combinar en la consulta de unión.

  4. En la pestaña Inicio haga clic en Vista > Vista SQL.

  5. Copie la instrucción SQL para la consulta de selección. Haga clic en la pestaña de la consulta de unión que empezó a crear anteriormente.

  6. Pegue la instrucción SQL de la consulta de selección en la pestaña de objeto de la vista SQL de la consulta de unión.

  7. Elimine el signo de punto y coma (;) que se encuentra al final de la instrucción SQL de la consulta de selección.

  8. Presione Entrar para mover el cursor una línea hacia abajo y, después, escriba UNION en la nueva línea.

  9. Haga clic en la pestaña de la siguiente consulta de selección que desee combinar en la consulta de unión.

  10. Repita los pasos del 5 al 10 de este procedimiento hasta que haya copiado y pegado todas las instrucciones SQL de las consultas de selección en la ventana de la vista SQL de la consulta de unión. No elimine el signo de punto y coma ni escriba nada después de la instrucción SQL de la última consulta de selección.

  11. En el grupo Resultados de la pestaña Diseño, haga clic en Ejecutar.

Los resultados de la consulta de unión se mostrarán en la vista Hoja de datos.

Ver un ejemplo de creación de una consulta de unión

Este es un ejemplo que puede recrear en la base de datos de ejemplo de Northwind. Esta consulta de unión recopila los nombres de personas de la tabla Clientes y los combina con los nombres de persona de la tabla Proveedores. Si prefiere seguir los pasos, trabaje con la copia de la base de datos de ejemplo de Northwind.

Su explorador no admite vídeo. Instale Microsoft Silverlight, Adobe Flash Player o Internet Explorer 9.

Estos son los pasos necesarios para crear este ejemplo:

  1. Cree dos consultas de selección llamadas Consulta1 y Consulta2, con las tablas Clientes y Proveedores respectivamente como orígenes de datos. Use los campos Nombre y Apellidos como los valores para mostrar.

  2. Cree una consulta llamada Consulta3 sin un origen de datos inicialmente y, después, haga clic en el comando Unión de la pestaña Diseño para convertir esta consulta en una consulta de unión.

  3. Copie y pegue las instrucciones SQL de Consulta1 y Consulta2 en Consulta3. Asegúrese de eliminar el signo de punto y coma adicional y agregue la palabra clave UNION. Después, puede comprobar los resultados en la vista Hoja de datos.

  4. Agregue una cláusula de ordenación a una de las consultas y, después, pegue la instrucción ORDER BY en la vista SQL de la consulta de unión. Tenga en cuenta que, en la consulta de unión Consulta3, justo antes de anexar el pedido, primero se eliminan los signos de punto y coma y, después, el nombre de tabla de los nombres de campo.

  5. Esta es la instrucción SQL final que combina y ordena los nombres para este ejemplo de consulta de unión:

    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 está acostumbrado a escribir instrucciones con sintaxis SQL, sin duda podrá escribir su propia instrucción SQL para la consulta de unión directamente en la vista SQL. Pero puede que le resulte útil seguir el método de copiar y pegar instrucciones SQL de otros objetos de consulta. Cada consulta puede ser mucho más complicada que los ejemplos sencillos de consulta de selección usados aquí. Le recomendamos que cree y pruebe cada consulta detenidamente antes de combinarlas en la consulta de unión. Si la consulta de unión no puede ejecutarse, puede ajustar cada consulta de forma individual hasta que se complete correctamente y, después, vuelva a crear la consulta de unión con la sintaxis corregida.

Revise el resto de las secciones de este artículo para obtener más consejos y sugerencias sobre el uso de consultas de unión.

En el ejemplo de la sección anterior con la base de datos de Northwind, solo se combinaron datos de dos tablas. Pero se pueden combinar tres o más tablas fácilmente con una consulta de unión. Por ejemplo, basándonos en el ejemplo anterior, puede que también quiera incluir los nombres de los empleados en el resultado de la consulta. Para completar esa tarea, puede agregar una tercera consulta y combinarla con la instrucción SQL anterior con una palabra clave adicional de UNION, como en el ejemplo siguiente:

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];

Al ver el resultado en la vista Hoja de datos, se mostrará una lista de todos los empleados con el nombre de la compañía de ejemplo, algo que puede que no le resulte muy útil. Si quiere que ese campo indique si una persona es un empleado interno, un proveedor o un cliente, puede incluir un valor fijo en lugar del nombre de la compañía. Esta sería la instrucción SQL resultante:

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];

Así se mostrarían los resultados en la vista Hoja de datos. Access mostrará estos cinco registros de ejemplo:

Empleo

Apellido

Nombre

Interno

García

Julia

Interno

Fuentes

Verónica

Proveedor

Valladares

Sergio

Cliente

Valentín

Pelayo

Cliente

Armijo

Pedro

La consulta anterior se puede reducir incluso más, ya que Access solo lee los nombres de los campos del resultado de la primera consulta de una consulta de unión. Aquí puede ver que quitamos el resultado de las secciones de las consultas segunda y tercera:

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];

En una consulta de unión de Access, solo se permite ordenar una vez, pero cada consulta se puede filtrar de manera individual. Basándonos en la consulta de unión de la sección anterior, este es un ejemplo en el que filtramos cada consulta al agregar una cláusula 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];

Si cambia a la vista Hoja de datos, verá resultados similares a estos:

Empleo

Apellido

Nombre

Proveedor

Arellano

Alejandra

Interno

García

Julia

Cliente

Hermosilla

Alberto

Interno

Martínez

Lucía

Proveedor

Melgar

Beatriz

Cliente

Amaraz

Álvaro

Proveedor

Castellanos

Bartolomé

Proveedor

Gil

Luis

Interno

Torres

Esteban

Proveedor

Olivares

Claudia

Interno

Gómez

Roberto

Si las consultas que quiere unir son muy distintas, puede que tenga que combinar datos de distintos tipos en un campo de salida. En ese caso, la consulta de unión devolverá con frecuencia los resultados como un tipo de datos de texto, ya que el tipo de datos admite texto y números.

Para comprender cómo funciona esto, usaremos la consulta de unión Transacciones de productos en la base de datos de ejemplo de Northwind. Abra la base de datos de ejemplo y, después, abra la consulta Transacciones de productos en la vista Hoja de datos. Los últimos diez registros serán similares a este resultado:

Id. de producto

Fecha del pedido

Nombre de la compañía

Transacción

Cantidad

77

22/01/2006

Proveedor B

Compra

60

80

22/01/2006

Proveedor D

Compra

75

81

22/01/2006

Proveedor A

Compra

125

81

22/01/2006

Proveedor A

Compra

200

7

20/01/2006

Compañía D

Venta

10

51

20/01/2006

Compañía D

Venta

10

80

20/01/2006

Compañía D

Venta

10

34

15/01/2006

Compañía AA

Venta

100

80

15/01/2006

Compañía AA

Venta

30

Imagine que quiere dividir el campo Cantidad en dos campos: Comprar y Vender. Imagine también que quiere tener un valor cero fijo para el campo sin valor. Este podría ser un ejemplo de la instrucción SQL para esta consulta de unión:

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 cambia a la vista Hoja de datos, verá que los últimos diez registros ahora se muestran de esta forma:

Id. de producto

Fecha del pedido

Nombre de la compañía

Transacción

Comprar

Vender

74

22/01/2006

Proveedor B

Compra

20

0

77

22/01/2006

Proveedor B

Compra

60

0

80

22/01/2006

Proveedor D

Compra

75

0

81

22/01/2006

Proveedor A

Compra

125

0

81

22/01/2006

Proveedor A

Compra

200

0

7

20/01/2006

Compañía D

Venta

0

10

51

20/01/2006

Compañía D

Venta

0

10

80

20/01/2006

Compañía D

Venta

0

10

34

15/01/2006

Compañía AA

Venta

0

100

80

15/01/2006

Compañía AA

Venta

0

30

Continuando con este ejemplo, ¿y si quiere que los campos con cero estén vacíos? Puede modificar la instrucción SQL para que no se muestre nada en lugar de cero; para hacerlo, agregue la palabra clave NULL, de esta forma:

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;

Pero, como puede que comprobara al cambiar a la vista Hoja de datos, se produjo un resultado inesperado. En la columna Comprar, se borraron todos los campos:

Id. de producto

Fecha del pedido

Nombre de la compañía

Transacción

Comprar

Vender

74

22/01/2006

Proveedor B

Compra

77

22/01/2006

Proveedor B

Compra

80

22/01/2006

Proveedor D

Compra

81

22/01/2006

Proveedor A

Compra

81

22/01/2006

Proveedor A

Compra

7

20/01/2006

Compañía D

Venta

10

51

20/01/2006

Compañía D

Venta

10

80

20/01/2006

Compañía D

Venta

10

34

15/01/2006

Compañía AA

Venta

100

80

15/01/2006

Compañía AA

Venta

30

Esto ocurre porque Access determina los tipos de datos de los campos a partir de la primera consulta. En este ejemplo, NULL no es un número.

Entonces, ¿qué ocurre si intenta insertar una cadena vacía para el valor en blanco de los campos? La instrucción SQL para este intento podría ser similar a la siguiente:

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;

Al cambiar a la vista Hoja de datos, verá que Access recupera los valores de Comprar, pero convirtió los valores en texto. Verá que son valores de texto porque están alineados a la izquierda en la vista Hoja de datos. La cadena vacía de la primera consulta no es un número y, por este motivo, verá estos resultados. También puede que se diera cuenta de que los valores de Vender también se convirtieron en texto porque los registros de compra contienen una cadena vacía.

Id. de producto

Fecha del pedido

Nombre de la compañía

Transacción

Comprar

Vender

74

22/01/2006

Proveedor B

Compra

20

77

22/01/2006

Proveedor B

Compra

60

80

22/01/2006

Proveedor D

Compra

75

81

22/01/2006

Proveedor A

Compra

125

81

22/01/2006

Proveedor A

Compra

200

7

20/01/2006

Compañía D

Venta

10

51

20/01/2006

Compañía D

Venta

10

80

20/01/2006

Compañía D

Venta

10

34

15/01/2006

Compañía AA

Venta

100

80

15/01/2006

Compañía AA

Venta

30

Entonces, ¿cómo puedo solucionar esto?

Una posible solución es forzar que la consulta espere un número como el valor del campo. Esto puede conseguirse con la siguiente expresión:

IIf(False, 0, Null)

La condición que se comprueba, False (falso), nunca será True (verdadero) y, por tanto, la expresión siempre devolverá NULL; pero Access sigue evaluando las dos opciones de salida y decide que la salida sea numérica o NULL.

Siga estos pasos para usar esta expresión en nuestro ejemplo práctico:

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;

Tenga en cuenta que no es necesario modificar la segunda consulta.

Si cambia a la vista Hoja de datos, ahora verá el resultado esperado:

Id. de producto

Fecha del pedido

Nombre de la compañía

Transacción

Comprar

Vender

74

22/01/2006

Proveedor B

Compra

20

77

22/01/2006

Proveedor B

Compra

60

80

22/01/2006

Proveedor D

Compra

75

81

22/01/2006

Proveedor A

Compra

125

81

22/01/2006

Proveedor A

Compra

200

7

20/01/2006

Compañía D

Venta

10

51

20/01/2006

Compañía D

Venta

10

80

20/01/2006

Compañía D

Venta

10

34

15/01/2006

Compañía AA

Venta

100

80

15/01/2006

Compañía AA

Venta

30

Otro método para obtener el mismo resultado es anteponer las consultas en la consulta de unión con otra consulta:

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

Por cada campo, Access devuelve valores fijos del tipo de datos que defina. Está claro que no quiere que el resultado de esta consulta interfiera con los resultados, por lo que el truco para evitar esto es incluir una cláusula WHERE en False:

WHERE False

Este es un pequeño truco, ya que siempre da un resultado de falso y, por lo tanto, la consulta no devuelve nada. Al combinar esta instrucción con la instrucción SQL existente, llegamos a la siguiente instrucción completada:

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;

Nota: La consulta combinada en este ejemplo con la base de datos de Northwind devuelve 100 registros, mientras que las dos consultas individuales devuelven 58 y 43 registros, con un total de 101 registros. El motivo de esta discrepancia es que dos de los registros no son únicos. Vea la sección Trabajar con registros distintos en consultas de unión con UNION ALL para obtener información sobre cómo solucionar este escenario con UNION ALL.

Un caso especial para una consulta de unión es combinar un conjunto de registros con un registro que contenga la suma de uno o más campos.

Este es otro ejemplo que puede crear en la base de datos de ejemplo de Northwind para mostrar cómo obtener un total en una consulta de unión.

  1. Cree una consulta sencilla para ver la compra de cervezas (id. de producto=34 en la base de datos de Northwind) con la siguiente sintaxis SQL:

    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. Si cambia a la vista Hoja de datos, verá cuatro compras:

    Fecha de recepción

    Cantidad

    22/01/2006

    100

    22/01/2006

    60

    04/04/2006

    50

    05/04/2006

    300

  3. Para obtener el total, cree una consulta de agregación sencilla con la siguiente instrucción SQL:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Si cambia a la vista Hoja de datos, solo verá un registro:

    MáxDeFecha recibido

    SumaDeCantidad

    05/04/2006

    510

  5. Combine estas dos consultas en una consulta de unión para anexar el registro con la cantidad total a los registros de compra:

    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. Si cambia a la vista Hoja de datos, verá las cuatro compras con la suma de cada una seguida por un registro con la cantidad total:

    Fecha de recepción

    Cantidad

    22/01/2006

    60

    22/01/2006

    100

    04/04/2006

    50

    05/04/2006

    300

    05/04/2006

    510

Con esto, completamos los conceptos básicos de cómo agregar totales en una consulta de unión. Puede que también quiera incluir valores fijos en las dos consultas (como “Detalles” y “Total”) para separar de forma visual el registro de total del resto de los registros. Para obtener información sobre cómo usar valores fijos, vea la sección Combinar tres o más tablas o consultas en una consulta de unión.

De forma predeterminada, en las consultas de unión de Access, solo se incluyen registros distintos. Pero ¿y si quiere incluir todos los registros? Aquí le podría resultar útil otro ejemplo.

En la sección anterior, le mostramos cómo crear un total en una consulta de unión. Modifique esa consulta de unión SQL para que incluya Id. de producto= 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];

Si cambia a la vista Hoja de datos, verá un resultado que puede resultar confuso:

Fecha de recepción

Cantidad

22/01/2006

100

22/01/2006

200

Está claro que un registro no devuelve dos veces la cantidad en el total.

El motivo de este resultado es que, en el mismo día, se vendió dos veces la misma cantidad de chocolates, como se indica en la tabla Detalles del pedido de compra. Este es el resultado de una consulta de selección sencilla donde se muestran los dos registros en la base de datos de ejemplo de Northwind:

Id. de pedido de compra

Producto

Cantidad

100

Chocolate de Northwind Traders

100

92

Chocolate de Northwind Traders

100

En la consulta de unión indicada anteriormente, puede ver que no se incluye el campo “Id. de pedido de compra” y que los dos campos no son dos registros únicos.

Para incluir todos los registros, use UNION ALL en lugar de UNION en la instrucción SQL. Es muy probable que esto afecte al orden de los resultados, por lo que le recomendamos que también incluya la cláusula ORDER BY para determinar un criterio de ordenación. Esta es la instrucción SQL modificada basada en el ejemplo anterior:

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];

Si cambia a la vista Hoja de datos, verá todos los detalles, además de un total como el último registro:

Fecha de recepción

Total

Cantidad

22/01/2006

100

22/01/2006

100

22/01/2006

Total

200

Las consultas de unión suelen usarse como el origen de registros de un control de cuadro combinado en un formulario. Puede usar ese cuadro combinado para seleccionar un valor con el que filtrar los registros del formulario. Por ejemplo, puede filtrar los registros de empleados por ciudad.

Para poner esto en práctica, aquí tiene otro ejemplo que puede crear en la base de datos de ejemplo de Northwind para ilustrar este escenario.

  1. Cree una consulta de selección sencilla con esta sintaxis SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Si cambia a la vista Hoja de datos, verá los siguientes resultados:

    Ciudad

    Filtrar

    Seattle

    Seattle

    Bellevue

    Bellevue

    Redmond

    Redmond

    Kirkland

    Kirkland

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

  3. Al comprobar los resultados, puede que no le resulten muy útiles. Expanda la consulta y transfórmela en una consulta de unión con la siguiente sintaxis SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Si cambia a la vista Hoja de datos, verá los siguientes resultados:

    Ciudad

    Filtrar

    <Todo>

    *

    Bellevue

    Bellevue

    Kirkland

    Kirkland

    Redmond

    Redmond

    Seattle

    Seattle

    Access realizará una unión de los nueve registros mostrados anteriormente con valores de campo fijo de <Todo> y “*”.

    Como esta cláusula de unión no contiene UNION ALL, Access solo devolverá registros únicos, lo que quiere decir que cada ciudad solo se devolverá una vez con valores idénticos fijos.

  5. Después de completar una consulta de unión donde se muestra una sola vez cada nombre de ciudad, además de una opción que selecciona todas las ciudades, puede usar esta consulta como el origen de registros para un cuadro combinado en un formulario. Si usa este ejemplo específico como un modelo, puede crear un control de cuadro combinado en un formulario, establecer esta consulta como el origen de registros, establecer la propiedad “Ancho de columna” de la columna Filtro en 0 (cero) para ocultarla visualmente y, después, establecer la propiedad “Columna enlazada” en 1 para indicar el índice de la segunda columna. En la propiedad Filtro del formulario en sí, puede agregar código (como el siguiente) para activar un filtro de formulario con el valor de la selección en el control de cuadro combinado:

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

    Después, el usuario del formulario puede filtrar los registros del formulario por un nombre de ciudad específico, o bien puede seleccionar <Todo> para mostrar una lista de todos los registros de todas las ciudades.

Principio de página

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.