Usar una consulta de unión para combinar varias consultas en un mismo resultado

Usar una consulta de unión para combinar varias consultas en un mismo resultado

Nota:  Nos gustaría proporcionarle el contenido de ayuda actual lo más rápido posible en su idioma. Esta página se ha traducido mediante un sistema automático y es posible que contenga imprecisiones o errores gramaticales. Nuestro objetivo es que este contenido sea útil para usted. ¿Puede informarnos sobre si la información le ha sido útil al final de la página? Aquí tiene el artículo en inglés para que pueda consultarlo fácilmente.

A veces puede desear enumerar 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 las tablas de dos o más. Este es el propósito de una consulta de unión en Access.

Para entender eficazmente las consultas de unión, primero debe estar familiarizado con el diseño de las consultas de selección básicas en Access. Para obtener más información acerca del diseño de las consultas de selección, vea crear una consulta de selección sencilla.

Nota: El contenido de este artículo está pensado para usarse con bases de datos de escritorio de Access. No puede crear o usar una consulta de unión en aplicaciones web ni bases de datos web de Access.

Un ejemplo de consulta de unión de trabajo de estudio

Si nunca ha creado una consulta de unión antes, podría resulte útil al primer práctico un ejemplo de trabajo en la plantilla de Northwind Access. Puede buscar la plantilla de ejemplo Northwind en la página de introducción de Access haciendo clic en archivo > nuevo o se puede descargar directamente una copia de esta ubicación: plantilla de ejemplo Northwind.

Después de que Access abre la base de datos Northwind, cerrar el formulario de cuadro de diálogo de inicio de sesión que aparece en primer lugar y, a continuación, expanda el panel de navegación. Haga clic en la parte superior del panel de navegación y, a continuación, seleccione el Tipo de objeto para organizar todos los objetos de base de datos por tipo. A continuación, expanda el grupo de consultas y verá una consulta denominada Transacciones de producto.

Las consultas de unión son fáciles de diferenciar de otros objetos de la consulta, ya que tienen un icono especial que se asemeja a dos círculos entrelazados que representa un conjunto de united entre dos conjuntos:

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

A diferencia de selección normal y consultas de acción, las tablas no están relacionadas en una consulta de unión, lo que significa que el acceso no se pueden usar el diseñador gráfico de consultas para crear o modificar consultas de unión. Podrá experimentar si abre una consulta de unión desde el panel de navegación; Access abre y mostrar los resultados en la vista Hoja de datos. En el comando de vistas en la ficha Inicio, habrá observado que La vista Diseño no está disponible cuando se trabaja con las consultas de unión. Solo puede cambiar entre la Vista Hoja de datos y Vista SQL cuando se trabaja con las consultas de unión.

Para continuar el estudio de este ejemplo de consulta de unión, haga clic en Inicio > vistas > Vista SQL para ver la sintaxis SQL que define. En esta ilustración, hemos agregado algún espacio adicional en el código SQL para que pueda ver fácilmente las distintas partes que componen una consulta de unión.

Ejemplo Visual de una consulta de unión en la vista SQL de la plantilla de Access de ejemplo Northwind.

Vamos a estudiar la sintaxis SQL de esta consulta de unión de la base de datos Northwind en detalle:

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 primera y la terceros partes de esta instrucción SQL son esencialmente dos consultas de selección. Estas consultas recuperan dos diferentes conjuntos de registros; uno de la tabla Pedidos de productos y una de la tabla de Compras de productos .

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

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

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

Crear una consulta de unión mediante la creación y combinar las consultas de selección

Aunque puede crear una consulta de unión escribiendo directamente la sintaxis SQL en la vista SQL, que puede resultarle más fácil crear en partes con consultas de selección. A continuación, puede copiar y pegar los elementos SQL en una consulta de unión combinada.

Si desea omitir los pasos de lectura y en su lugar ver un ejemplo, vea la siguiente sección, vea un ejemplo de la 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. En el cuadro de diálogo Mostrar tabla, haga doble clic en la tabla con los campos que quiera incluir. La tabla se agrega a la ventana de diseño de la consulta.

  3. Cierre el cuadro de diálogo Mostrar tabla.

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

  5. De manera opcional, agregue criterios a los campos escribiendo las expresiones apropiadas en la fila criterios de la cuadrícula.

  6. 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.

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

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

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

Ahora que ha creado las consultas de selección, es hora de combinarlas. En este paso, creará la consulta de unión copiando y pegando las instrucciones SQL.

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

  2. Cierre el cuadro de diálogo Mostrar tabla.

  3. En la ficha Diseño, en el grupo consultas, haga clic en unión. Access oculta la ventana de diseño de consulta y muestra la pestaña de objeto de la vista SQL. En este momento, la pestaña de objeto de vista SQL está vacía.

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

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

  6. Copie la instrucción SQL de la consulta de selección. Haga clic en la pestaña de la consulta de unión que ha empezado a crear una versión anterior.

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

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

  9. Presione ENTRAR para mover el cursor una línea hacia abajo y, a continuación, escriba UNION en la nueva línea.

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

  11. 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.

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

Los resultados de la consulta de unión aparecen en la vista Hoja de datos.

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

Aquí tenemos un ejemplo que puede volver a crear la base de datos de ejemplo Northwind. Esta consulta de unión recopila los nombres de las personas de la tabla compradores y combina con los nombres de las personas de la tabla proveedores . Si desea seguir a lo largo, trabajar con estos pasos en su copia de la base de datos de ejemplo Northwind.

Ejemplo Visual de la creación de una consulta de unión en la plantilla de Access de ejemplo Northwind.

Estos son los pasos necesarios para crear este ejemplo:

  1. Cree dos consultas de selección denominadas Consulta1 y consulta2 con las tablas clientes y productos respectivamente como orígenes de datos. Use los campos nombre y apellido como valores de la pantalla.

  2. Crear una nueva consulta denominada inicialmente Query3 con ningún origen de datos y, a continuación, haga clic en el comando unión en la ficha Diseño para realizar esta consulta en una consulta de unión.

  3. Copie y pegue las instrucciones SQL de Consulta1 y consulta2 Query3. Asegúrese de quitar el punto y coma adicional y agregar en la palabra clave UNION. A continuación, puede comprobar los resultados de la vista Hoja de datos.

  4. Agregar en una cláusula de clasificación a una de las consultas y, a continuación, pegue la instrucción ORDER BY en la vista SQL de la consulta de unión. Observe que en Query3, la consulta de unión, cuando la ordenación está a punto de agregarse, primero el punto y coma se quita, a continuación, asigne un nombre a la tabla de los nombres de campo.

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

    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 se siente cómodo con muy escribir sintaxis SQL, por supuesto, puede escribir su propio SQL instrucción de la consulta de unión directamente en SQL ver. Sin embargo, puede ser útil para seguir el método de copiar y pegar SQL de otros objetos de la consulta. Cada consulta puede ser mucho más complicado que los ejemplos de consulta de selección sencilla utilizados aquí. Puede ser una ventaja para crear y probar cada consulta detenidamente antes de combinarlas en la consulta de unión. Si no puede ejecutar la consulta de unión, puede ajustar individualmente cada consulta hasta que se realiza correctamente y, a continuación, volver a crear la consulta de unión con la sintaxis corregida.

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

En el ejemplo de la sección anterior con la base de datos Northwind, solo los datos de dos tablas se combinan. Sin embargo, puede combinar tres o más tablas muy fácilmente en una consulta de unión. Por ejemplo, basándose en el ejemplo anterior, podría desea incluir también los nombres de los empleados en los resultados de la consulta. Puede realizar dicha tarea agregando una consulta terceros y combinar con la instrucción SQL anterior con una palabra clave UNION adicional similar a esta:

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

Cuando se ve el resultado en la vista Hoja de datos, se mostrará todos los empleados con el nombre de compañía de ejemplo, que probablemente no es muy útil. Si desea que este campo para indicar si una persona es un empleado interno, un proveedor, o desde un cliente, puede incluir un valor fijo en lugar del nombre de la compañía. Le mostramos cómo sería la instrucción 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];

Le mostramos cómo aparece el resultado en la vista Hoja de datos. Access muestra estos registros de cinco ejemplo:

Empleo

Apellido

Nombre

Internas

García

Julia

Internas

Giussani

Laura

Proveedor

Glasson

Stuart

Cliente

López García

Gerardo

Cliente

Bermejo

Antonio

Puede reducir aún más la consulta anterior desde Access lee sólo los nombres de los campos de resultados de la primera consulta en una consulta de unión. Aquí verá que hemos eliminado el resultado de las secciones de segundo y tercer consulta:

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, pedidos se permiten solo una vez pero cada consulta se puede filtrar de forma individual. A partir consulta de unión de la sección anterior, he aquí un ejemplo de dónde nos hemos filtra cada consulta agregando 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];

Cambiar a hoja de datos ver y verá resultados similares a esta:

Empleo

Apellido

Nombre

Proveedor

Andersen

Miguel A.

Internas

García

Julia

Cliente

Hasselberg

Jonas

Internas

Martínez

Lucía

Proveedor

Echevarria Hernández

Amaya

Cliente

Maldonado Guerra

Sven

Proveedor

Peiro Alba

Mikael

Proveedor

Gil

Luis

Internas

Torres

Esteban

Proveedor

Weiler

Cornelia

Internas

Gómez

Roberto

Si las consultas de unión están muy diferentes, puede que encuentre una situación donde un campo de salida debe combinar datos de diferentes tipos de datos. Si es así, la consulta de unión más a menudo devolverán los resultados como un tipo de datos de texto desde ese tipo de datos puede contener dos números y de texto.

Para comprender cómo funciona esto, usaremos la consulta de unión de Las transacciones de producto en la base de datos de ejemplo Northwind. Abra dicha base de datos de ejemplo y, a continuación, abra la consulta de transacciones de producto en la vista Hoja de datos. Los últimos diez registros deben ser similares a este resultado:

Id. de producto

Fecha del pedido

Nombre de la compañía

Transacción

Cantidad

77

22/1/2006

Proveedor B

Compra

60

80

22/1/2006

Proveedor D

Compra

75

81

22/1/2006

Proveedor A

Compra

125

81

22/1/2006

Proveedor A

Compra

200

7

20/1/2006

Compañía D

Venta

10

51

20/1/2006

Compañía D

Venta

10

80

20/1/2006

Compañía D

Venta

10

34

15/1/2006

Compañía AA

Venta

100

80

15/1/2006

Compañía AA

Venta

30

Supongamos que desea que la división de campo de cantidad en dos - comprar y vender. Supongamos también que desee que tengan un fijo valor para el campo con ningún valor de cero. Aquí es el aspecto que tendrá el código 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á los últimos diez registros que ahora se muestra como la siguiente:

Id. de producto

Fecha del pedido

Nombre de la compañía

Transacción

Comprar

Vender

74

22/1/2006

Proveedor B

Compra

20

0

77

22/1/2006

Proveedor B

Compra

60

0

80

22/1/2006

Proveedor D

Compra

75

0

81

22/1/2006

Proveedor A

Compra

125

0

81

22/1/2006

Proveedor A

Compra

200

0

7

20/1/2006

Compañía D

Venta

0

10

51

20/1/2006

Compañía D

Venta

0

10

80

20/1/2006

Compañía D

Venta

0

10

34

15/1/2006

Compañía AA

Venta

0

100

80

15/1/2006

Compañía AA

Venta

0

30

¿Continuar en este ejemplo, si desea los campos con cero vacío? Puede modificar la instrucción SQL para mostrar nada en lugar de cero mediante la adición de la palabra clave Null como la siguiente:

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;

Sin embargo, como puede observar cambia a la vista Hoja de datos, ahora tiene un resultado inesperado. En la columna de comprar, cada campo está desactivada:

Id. de producto

Fecha del pedido

Nombre de la compañía

Transacción

Comprar

Vender

74

22/1/2006

Proveedor B

Compra

77

22/1/2006

Proveedor B

Compra

80

22/1/2006

Proveedor D

Compra

81

22/1/2006

Proveedor A

Compra

81

22/1/2006

Proveedor A

Compra

7

20/1/2006

Compañía D

Venta

10

51

20/1/2006

Compañía D

Venta

10

80

20/1/2006

Compañía D

Venta

10

34

15/1/2006

Compañía AA

Venta

100

80

15/1/2006

Compañía AA

Venta

30

El motivo que esto suceda es porque Access determina los tipos de datos de los campos de la primera consulta. En este ejemplo, Null no es un número.

¿Qué sucede si intenta insertar una cadena vacía para el valor en blanco de campos? La instrucción SQL para este intento podría tener el siguiente aspecto:

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;

Cuando se pasa a la vista Hoja de datos, verá que Access recupera los valores de comprar, pero convierten los valores en texto. Puede distinguir que estos son los valores de texto, ya que son alineado a la izquierda en la vista Hoja de datos. Una cadena vacía en la primera consulta no es un número lo que verá los resultados. Observará que los valores de venta también se convierten 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/1/2006

Proveedor B

Compra

20

77

22/1/2006

Proveedor B

Compra

60

80

22/1/2006

Proveedor D

Compra

75

81

22/1/2006

Proveedor A

Compra

125

81

22/1/2006

Proveedor A

Compra

200

7

20/1/2006

Compañía D

Venta

10

51

20/1/2006

Compañía D

Venta

10

80

20/1/2006

Compañía D

Venta

10

34

15/1/2006

Compañía AA

Venta

100

80

15/1/2006

Compañía AA

Venta

30

¿Cómo puede resolver este rompecabezas?

Una solución es obligar a la consulta que va a pasar el valor del campo sea un número. Que se puede realizar con la expresión:

IIf(False, 0, Null)

La condición comprobar False, nunca será True, por tanto, la expresión devolverá siempre Nullpero Access sigue evalúe ambas opciones de salida y decide el resultado numérico o Null.

Le mostramos cómo podemos utilizar esta expresión en nuestro ejemplo de trabajo:

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á un resultado que queremos:

Id. de producto

Fecha del pedido

Nombre de la compañía

Transacción

Comprar

Vender

74

22/1/2006

Proveedor B

Compra

20

77

22/1/2006

Proveedor B

Compra

60

80

22/1/2006

Proveedor D

Compra

75

81

22/1/2006

Proveedor A

Compra

125

81

22/1/2006

Proveedor A

Compra

200

7

20/1/2006

Compañía D

Venta

10

51

20/1/2006

Compañía D

Venta

10

80

20/1/2006

Compañía D

Venta

10

34

15/1/2006

Compañía AA

Venta

100

80

15/1/2006

Compañía AA

Venta

30

Un método alternativo para conseguir el mismo resultado es detrás de las consultas de 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

Para cada campo, Access devuelve valores fijos del tipo de datos que defina. Por supuesto, no quiere que el resultado de esta consulta interferir con los resultados, por lo que es el truco para evitar incluir una cláusula WHERE para falso:

WHERE False

Se trata de un pequeño truco puesto siempre es false y, a continuación, la consulta no devuelve nada. Combinar esta declaración con la instrucción SQL existente y se reciben en una instrucción completada como sigue:

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 aquí en este ejemplo de uso de la base de datos Northwind devuelve 100 registros, mientras que las dos consultas individuales devuelven 58 y 43 registros para un total de 101 registros. El motivo de esta diferencia es porque dos 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 resolver este escenario con UNION ALL.

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

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

  1. Crear una nueva consulta simple para ver la compra de cervezas (identificador de producto = 34 en la base de datos 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. Cambiar a hoja de datos ver y debe ver cuatro compras:

    Fecha de recepción

    Cantidad

    22/1/2006

    100

    22/1/2006

    60

    4/4/2006

    50

    4/5/2006

    300

  3. Para obtener el total, crear una consulta de adición simple mediante la instrucción SQL siguiente:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Cambiar a hoja de datos ver y debe ver un único registro:

    MaxOfDate recibido

    SumaDeCantidad

    4/5/2006

    510

  5. Combinar estos 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. Cambiar a hoja de datos ver y debe ver las cuatro compras con la suma de cada uno seguido de un registro que la cantidad de totales:

    Fecha de recepción

    Cantidad

    22/1/2006

    60

    22/1/2006

    100

    4/4/2006

    50

    4/5/2006

    300

    4/5/2006

    510

Que trata sobre los conceptos básicos de la adición de totales en una consulta de unión. También puede incluir valores fijos en ambas consultas como "Detalles" y "Total" para separar visualmente el total de los registros de los demás registros. Puede revisar con valores fijos en la sección Combinar tres o más tablas o consultas en una consulta de unión.

Las consultas de unión en Access predeterminada solo incluyen registros distintos. Pero, ¿qué ocurre si desea incluir todos los registros? Otro ejemplo puede ser útil aquí.

En la sección anterior, le mostramos cómo crear un total en una consulta de unión. Modificar esa consulta de unión SQL para incluir el identificador 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];

Cambiar a hoja de datos ver y debe ver un resultado confuso:

Fecha de recepción

Cantidad

22/1/2006

100

22/1/2006

200

Por supuesto, un registro no devuelve dos veces la cantidad total.

El motivo por el que vea este resultado es porque en un día la misma cantidad de bombones vendió dos veces: como registrado en la tabla de detalles de pedido de compra. Aquí es un resultado de consulta de selección sencilla que muestra dos registros en la base de datos de ejemplo Northwind:

Id. de pedido de compra

Producto

Cantidad

100

Chocolate Northwind Traders

100

92

Chocolate Northwind Traders

100

En la consulta de unión que se indicó anteriormente, puede ver que no se incluye el campo identificador de pedido de compra y que los dos campos no realizar dos registros distintos.

Si desea incluir todos los registros, use UNION ALL en lugar de unión en SQL. Esto seguramente tendrá un gran impacto en la ordenación de los resultados, por lo que desea incluir también una cláusula ORDER BY para determinar el criterio de ordenación. Esto es la creación de SQL modificada desactivar 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];

Cambiar a hoja de datos y la vista debe ver todos los detalles, además de un total como el último registro:

Fecha de recepción

Total

Cantidad

22/1/2006

100

22/1/2006

100

22/1/2006

Total

200

Un uso común de una consulta de unión es servir como el origen de registros para un control de cuadro combinado en un formulario. Puede usar dicho cuadro combinado para seleccionar un valor para filtrar los registros del formulario. Por ejemplo, filtrar los registros del empleado por su ciudad.

Para ver cómo podría funcionar esto, esto otro ejemplo que se puede crear la base de datos de ejemplo Northwind para ilustrar este escenario.

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

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Cambiar a hoja de datos ver y debe obtener los resultados siguientes:

    Ciudad

    Filtrar

    Seattle

    Seattle

    Santoña

    Santoña

    Redmond

    Redmond

    Kirkland

    Kirkland

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

    Redmond

    Redmond

    Seattle

    Seattle

  3. Mirar los resultados que no vea una gran cantidad de valor. Expanda la consulta aunque y transformar los datos a una consulta de unión mediante el uso de la instrucción SQL siguiente:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Cambiar a hoja de datos ver y debe obtener los resultados siguientes:

    Ciudad

    Filtrar

    < todo >

    *

    Santoña

    Santoña

    Kirkland

    Kirkland

    Redmond

    Redmond

    Seattle

    Seattle

    Access realiza la unión de los registros de nueve mostrado anteriormente, con valores de campo fijo de < todos > y "*".

    Puesto que esta cláusula unión no contiene UNION ALL, Access devuelve únicamente los registros distintos lo que significa que cada ciudad se devuelve solo una vez con valores idénticos fijos.

  5. Ahora que ya tiene una consulta de unión completada mostrar cada nombre de la ciudad una sola vez, junto con una opción eficaz selecciona todas las ciudades, puede usar esta consulta como origen de registros para un cuadro combinado en un formulario. Con este ejemplo específico como modelo, puede crear un control de cuadro combinado en un formulario, establecer esta consulta como origen de registros, establezca la propiedad de ancho de columna de la columna de filtro como 0 (cero) para ocultarlo de forma visual y, a continuación, establezca la propiedad columna enlazada en 1 para indicar el índice la segunda columna. En la propiedad filtro del propio formulario, a continuación, puede agregar código como el siguiente para activar un filtro de formulario mediante el valor de lo que se ha seleccionado en el control de cuadro combinado:

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

    El usuario del formulario, a continuación, puede filtrar los registros del formulario a un nombre de ciudad específica o seleccione < todos > para obtener una lista de todos los registros para todas las ciudades.

Principio de página

Ampliar sus conocimientos de Office
Explorar los cursos
Obtener nuevas características primero
Únase a los participantes de Office Insider

¿Le ha sido útil esta información?

¡Gracias por sus comentarios!

Gracias por sus comentarios. Quizá le interese ponerse en contacto con uno de nuestros agentes de soporte de Office.

×