Usar uma consulta união para combinar várias consultas em um único resultado

Aplica-se a
Access para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Às vezes, talvez você queira combinar registros de uma tabela ou consulta com registros de uma ou mais outras tabelas em um único resultado. É isso que uma consulta sindical faz no Access.

Para entender efetivamente as consultas união, primeiro você deve estar familiarizado com o design de consultas seleção básicas no Access. Para saber mais sobre como criar consultas seleção, confira Criar uma consulta seleção simples.

Observe um exemplo funcional de consulta união

Se você nunca criou uma consulta sindical antes, pode ajudar a primeiro estudar um exemplo de trabalho no modelo northwind access. Você pode pesquisar o modelo de exemplo northwind na página introdução do Access selecionando Arquivo>Novo. Você também pode baixar uma cópia diretamente do modelo de exemplo northwind.

Depois que o Access abrir o banco de dados Northwind, descarte a caixa de diálogo de logon exibida pela primeira vez e expanda o Painel de Navegação. Selecione a parte superior do Painel de Navegação e selecione Tipo de Objeto para organizar todos os objetos de banco de dados por tipo. Em seguida, expanda o grupo Consultas e você verá uma consulta chamada Transações de Produto.

As consultas união são fáceis de diferenciar de outros objetos de consulta porque possuem um ícone especial que se parecem com dois círculos entrelaçados representando um conjunto unido a partir de dois conjuntos:

Captura de tela de um ícone de consulta sindical no Access. Ao contrário das consultas de seleção e ação normais, as tabelas não estão relacionadas em uma consulta sindical. Isso significa que você não pode usar o designer de consulta gráfica Access para criar ou editar consultas sindicais. Se você abrir uma consulta sindical no Painel de Navegação, o Access a abrirá e exibirá os resultados no modo de exibição de folha de dados. Em Exibições na guia Página Inicial , observe que o Modo de Exibição de Design não está disponível quando você trabalha com consultas sindicais. Você só pode alternar entre o Modo de Exibição de Folha de Dados e o Modo de Exibição do SQL.

Para continuar o estudo desse exemplo de consulta de união, clique em ModosdeExibiçãoSQL do Home > Views > para exibir a sintaxe que a SQL define. Nesta ilustração, adicionamos alguns espaçamentos extras no SQL para que você possa ver facilmente as várias partes que compõem uma consulta sindical.

Vamos examinar a SQL sintaxe dessa consulta sindical do banco de dados Northwind em detalhes:


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;

A primeira e a terceira parte desta instrução SQL são essencialmente duas consultas seleção. Essas consultas recuperam dois conjuntos diferentes de registros: um da tabela Pedidos de produtos e um da tabela Compras de produtos.

A segunda parte dessa SQL instrução é a UNION palavra-chave, que informa ao Access para combinar esses dois conjuntos de registros.

A última parte desta SQL instrução determina a ordem dos registros combinados usando uma instrução ORDER BY . Neste exemplo, o Access ordena todos os registros pelo campo Data da Ordem em ordem decrescente.

Observação

As consultas união são sempre somente leitura no Access. Não é possível alterar valores no modo Folha de Dados.

Criar uma consulta união criando e combinando consultas seleção

Mesmo que você possa criar uma consulta sindical escrevendo a SQL sintaxe diretamente no SQL View, talvez seja mais fácil construí-la em partes com consultas selecionadas. Em seguida, você pode copiar e colar as partes do SQL em uma consulta união combinada.

Se você quiser pular a leitura das etapas e, em vez disso, assistir a um exemplo, confira a próxima seção, Assista a um exemplo de criação de uma consulta união.

  1. Na guia Criar, no grupo Consultas, clique em Design da Consulta.
  2. Clique duas vezes na tabela que tem os campos que você deseja incluir. A tabela é adicionada à janela de design da consulta.
  3. Na janela de design de consulta, clique duas vezes em cada um dos campos que você deseja incluir. Ao selecionar campos, verifique se adicionou o mesmo número de campos que adicionou às outras consultas seleção, na mesma ordem. Preste bastante atenção aos tipos de dados dos campos e verifique se eles possuem tipos de dados compatíveis com os campos na mesma posição das outras consultas que você está combinando. Por exemplo, se a primeira consulta seleção tiver cinco campos, o primeiro deles contendo dados de data/hora, verifique se as outras consultas seleção que você está combinando também têm cinco campos, o primeiro deles contendo dados de data/hora, e assim por diante.
  4. Opcionalmente, adicione critérios aos campos, digitando as expressões apropriadas na linha Critérios da grade de campo.
  5. Após terminar de adicionar campos e critérios de campo, execute a consulta seleção e examine a saída. Na guia Design, no grupo Resultados, clique em Executar.
  6. Alterne a consulta para o modo Design.
  7. Salve a consulta seleção e deixe-a aberta.
  8. Repita este procedimento para cada consulta seleção que deseja combinar.

Agora que você criou suas consultas selecionadas, é hora de combiná-las. Nesta etapa, você cria a consulta sindical copiando e colando as SQL instruções.

  1. Na guia Criar, no grupo Consultas, clique em Design da Consulta.
  2. Na guia Design, no grupo Consulta, clique em União. O Access oculta a janela de design da consulta e mostra a guia objeto SQL View . Neste ponto, a guia está vazia.
  3. Clique na guia da primeira consulta seleção a ser combinada na consulta união.
  4. Na guia Página Inicial , clique em Exibir Exibição>SQL.
  5. Copie a SQL instrução para a consulta selecionada. Clique na guia da consulta união que você começou a criar anteriormente.
  6. Cole a SQL instrução para a consulta de seleção na guia objeto SqL View da consulta de união.
  7. Exclua o ponto e vírgula (;) no final da instrução de consulta SQL selecionada.
  8. Pressione Enter para mover o cursor para baixo de uma linha e digite UNION na nova linha.
  9. Clique na guia da próxima consulta seleção a ser combinada na consulta união.
  10. Repita as etapas 5 a 10 até que você tenha copiado e colado todas as SQL instruções para as consultas selecionadas na janela Exibição SQL da consulta sindical. Não exclua o ponto e vírgula ou digite nada seguindo a SQL instrução da última consulta selecionada.
  11. Na guia Design, no grupo Resultados, clique em Executar.

Os resultados da sua consulta união aparecem no modo Folha de Dados.

Assista a um exemplo sobre como criar uma consulta união

Aqui está um exemplo que você pode recriar no banco de dados de exemplo northwind. Essa consulta união reúne os nomes das pessoas da tabela Clientes e combina-os com os nomes das pessoas da tabela Fornecedores. Se você quiser acompanhar, siga estas etapas na sua cópia do banco de dados de exemplo da Northwind.

Estas são as etapas necessárias para criar este exemplo:

  1. Crie duas consultas seleção chamadas Consulta1 e Consulta2 usando as tabelas Clientes e Fornecedores, respectivamente, como fontes de dados. Use os campos nome e sobrenome como valores de exibição.

  2. Crie uma nova consulta chamada Consulta3 sem fontes de dados inicialmente e, em seguida, clique no comando União na guia Design para transformar essa consulta em uma consulta União.

  3. Copie e cole as instruções SQL da Consulta1 e da Consulta2 para a Consulta3. Certifique-se de remover o ponto e vírgula extra e adicionar o UNION palavra-chave. Verifique os resultados no modo Folha de Dados.

  4. Adicione uma cláusula de ordenação a uma das consultas e cole a ORDER BY instrução na consulta de união no Modo de Exibição SQL. Observe que, na Consulta3, a consulta união, quando a ordenação está prestes a ser anexada, primeiro, os pontos e vírgulas são removidos e, em seguida, o nome da tabela dos nomes de campo.

  5. A final SQL que combina e classifica os nomes para este exemplo de consulta sindical é a seguinte:

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

Se você estiver muito confortável escrevendo SQL sintaxe, poderá escrever sua própria SQL instrução para a consulta de união diretamente no SQL View. No entanto, talvez seja útil seguir a abordagem de copiar e colar o SQL de outros objetos de consulta. As consultas podem ser muito mais complicadas do que os exemplos simples de consultas seleção usados aqui. Pode ser vantajoso criar e testar cuidadosamente cada consulta antes de combiná-las na consulta união. Se a consulta união não for executada, você poderá ajustar cada consulta individualmente até conseguir e, em seguida, recriar sua consulta união com a sintaxe corrigida.

Examine as demais seções deste artigo para saber mais dicas e truques sobre como usar consultas união.

Combinar três ou mais tabelas ou consultas em uma consulta união

No exemplo da seção anterior que usa o banco de dados Northwind, os dados de apenas duas tabelas são combinados. No entanto, você pode combinar três ou mais tabelas com muita facilidade em uma consulta sindical. Por exemplo, baseando-se no exemplo anterior, talvez você também queira incluir os nomes dos funcionários na saída da consulta. Você pode realizar essa tarefa adicionando uma terceira consulta e combinando com a instrução SQL anterior com uma palavra-chave UNION adicional como 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];

Quando você exibir o resultado no modo de exibição de folha de dados, todos os funcionários serão listados com o nome da empresa de exemplo, o que provavelmente não é muito útil. Se você quiser que esse campo mostre se uma pessoa é um funcionário interno, de um fornecedor ou de um cliente, você pode incluir um valor fixo em vez do nome da empresa. Veja como é a SQL aparência:


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

Veja como o resultado é exibido no modo Folha de Dados. O Access exibe esses cinco registros de exemplo:

Contratação Sobrenome Nome
Internos Fernandes Brenda
Internos Cunha Laura
Fornecedor Rodrigues Mateus
Cliente Castro Henrique
Cliente Teixeira Antônio

Pode reduzir ainda mais a consulta porque o Access lê os nomes dos campos de saída apenas a partir da primeira consulta numa consulta união. Aqui, o resultado da segunda e terceira secções de consulta é removido:


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

Filtragem em consultas união

Numa consulta união do Access, a ordenação só é permitida uma vez, mas pode filtrar cada consulta individualmente. Com base na consulta união da secção anterior, eis um exemplo que filtra cada consulta ao adicionar uma WHERE cláusula.


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

Alterne para o modo Folha de Dados e você verá resultados semelhantes a este:

Contratação Sobrenome Nome
Fornecedor Cardoso Lara C.
Internos Fernandes Brenda
Cliente Pena Fábio
Internos Pena Alice
Fornecedor Lima Yara
Cliente Mendes Nicolau
Fornecedor Soares Marcos
Fornecedor Silva Matheus
Internos Mendes Nicolau
Fornecedor Mello Melissa
Internos Gonçalves Pedro

Combinação de tipos de dados

Se as consultas que associar forem muito diferentes, poderá deparar-se com uma situação em que um campo de saída tem de combinar dados de diferentes tipos de dados. Nesse caso, a consulta união normalmente retornará os resultados como um tipo de dados de texto, pois esse tipo de dados pode conter texto e números.

Para entender como isso funciona, usaremos a consulta união Transações de produtos no banco de dados de exemplo da Northwind. Abra esse banco de dados de exemplo e, em seguida, abra a consulta Transações de produtos no modo Folha de Dados. Os últimos dez registros devem ser semelhantes a essa saída:

ID do Produto Data do Pedido Nome da Empresa Transação Quantidade
77 22/01/2006 Fornecedor B Compra 60
80 22/01/2006 Fornecedor D Compra 75
81 22/01/2006 Fornecedor A Compra 125
81 22/01/2006 Fornecedor A Compra 200
7 20/01/2006 Empresa D Vendas 10
51 20/01/2006 Empresa D Vendas 10
80 20/01/2006 Empresa D Vendas 10
34 15/01/2006 Empresa AA Vendas 100
80 15/01/2006 Empresa AA Vendas 30

Vamos supor que você queira dividir o campo Quantidade em dois campos: Comprar e Vender. Vamos também supor que você deseja um valor zero fixo para o campo sem valor. Aqui está como é a SQL aparência para esta consulta sindical:

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;

Se você mudar para o modo Folha de Dados, verá os dez últimos registros exibidos da seguinte forma:

ID do Produto Data do Pedido Nome da Empresa Transação Comprar Vender
74 22/01/2006 Fornecedor B Compra 20 0
77 22/01/2006 Fornecedor B Compra 60 0
80 22/01/2006 Fornecedor D Compra 75 0
81 22/01/2006 Fornecedor A Compra 125 0
81 22/01/2006 Fornecedor A Compra 200 0
7 20/01/2006 Empresa D Vendas 0 10
51 20/01/2006 Empresa D Vendas 0 10
80 20/01/2006 Empresa D Vendas 0 10
34 15/01/2006 Empresa AA Vendas 0 100
80 15/01/2006 Empresa AA Vendas 0 30

Continuando este exemplo, e se você quiser que os campos com valores zero estejam vazios? Você pode modificar o SQL para exibir nada em vez de zero adicionando o Null palavra-chave, conforme mostrado aqui:

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;

No entanto, como você pode ter observado após ter alternado para o modo Folha de Dados, agora você tem um resultado inesperado. Na coluna Comprar, todos os campos estão limpos:

ID do Produto Data do Pedido Nome da Empresa Transação Comprar Vender
74 22/01/2006 Fornecedor B Compra
77 22/01/2006 Fornecedor B Compra
80 22/01/2006 Fornecedor D Compra
81 22/01/2006 Fornecedor A Compra
81 22/01/2006 Fornecedor A Compra
7 20/01/2006 Empresa D Vendas 10
51 20/01/2006 Empresa D Vendas 10
80 20/01/2006 Empresa D Vendas 10
34 15/01/2006 Empresa AA Vendas 100
80 15/01/2006 Empresa AA Vendas 30

Isso acontece porque o Access determina os tipos de dados dos campos na primeira consulta. Neste exemplo, Null não é um número.

Então, o que acontece se você tentar inserir uma cadeia de caracteres vazia para o valor em branco dos campos? O SQL para esta tentativa pode ser semelhante a este:

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;

Ao alternar para o modo Folha de Dados, você verá que o Access recuperou os valores de Comprar, mas converteu os valores em texto. Você pode dizer que estes são valores de texto já que eles estão alinhados à esquerda no modo Folha de Dados. A cadeia de caracteres vazia na primeira consulta não é um número e é por isso que você vê esses resultados. Você também notará que os valores de Vender também são convertidos em texto porque os registros de compra contêm uma cadeia de caracteres vazia.

ID do Produto Data do Pedido Nome da Empresa Transação Comprar Vender
74 22/01/2006 Fornecedor B Compra 20
77 22/01/2006 Fornecedor B Compra 60
80 22/01/2006 Fornecedor D Compra 75
81 22/01/2006 Fornecedor A Compra 125
81 22/01/2006 Fornecedor A Compra 200
7 20/01/2006 Empresa D Vendas 10
51 20/01/2006 Empresa D Vendas 10
80 20/01/2006 Empresa D Vendas 10
34 15/01/2006 Empresa AA Vendas 100
80 15/01/2006 Empresa AA Vendas 30

Então, como você resolve esse enigma?

Uma solução é forçar a consulta a esperar que o valor do campo seja um número. Você pode fazer isso com esta expressão:


IIf(False, 0, Null)

A condição para marcar, False, nunca Trueé , portanto, a expressão sempre retorna Null. No entanto, o Access ainda avalia as duas opções de saída e trata a saída como numérica ou Null.

Veja aqui como podemos usar essa expressão no exemplo funcional:


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;

Você não precisa modificar a segunda consulta.

Se você alternar para o modo Folha de Dados, verá um resultado que desejamos:

ID do Produto Data do Pedido Nome da Empresa Transação Comprar Vender
74 22/01/2006 Fornecedor B Compra 20
77 22/01/2006 Fornecedor B Compra 60
80 22/01/2006 Fornecedor D Compra 75
81 22/01/2006 Fornecedor A Compra 125
81 22/01/2006 Fornecedor A Compra 200
7 20/01/2006 Empresa D Vendas 10
51 20/01/2006 Empresa D Vendas 10
80 20/01/2006 Empresa D Vendas 10
34 15/01/2006 Empresa AA Vendas 100
80 15/01/2006 Empresa AA Vendas 30

Um método alternativo para obter o mesmo resultado é preceder as consultas na consulta união com outra 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, o Access retorna valores fixos do tipo de dados que você definir. Claro, você não quer que a saída desta consulta interfira nos resultados, portanto, o truque para evitar isso é incluir uma cláusula WHERE em False:

WHERE False

Este é um pequeno truque. Como a condição é sempre falsa, a consulta não retorna nada. Combinando essa declaração com o SQL existente, chegaremos a uma instrução completa, conforme descrita a seguir:

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;

Observação

Neste exemplo, a consulta combinada no banco de dados Northwind retorna 100 registros, enquanto as duas consultas individuais retornam 58 e 43 registros para um total de 101 registros. Essa diferença acontece porque dois registros não são exclusivos. Consulte Trabalhar com registros distintos em consultas sindicais usando UNION ALL para saber como resolver esse cenário usando UNION ALL.

Adicionar totais a uma consulta união

Um uso especial para uma consulta sindical é combinar um conjunto de registros com um registro que contém a soma de um ou mais campos.

Veja outro exemplo que você pode criar no banco de dados de exemplo da Northwind para ilustrar a forma de obter um total em uma consulta união.

  1. Crie uma nova consulta simples para exibir a compra de cervejas (ID do produto = 34 no banco de dados da Northwind) usando a seguinte sintaxe 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. Alterne para o modo Folha de Dados e você verá quatro compras:

    Data de recebimento Quantidade
    22/01/2006 100
    22/01/2006 60
    04/04/2006 50
    05/04/2006 300
  3. Para obter o total, crie uma consulta agregação simples usando o SQL a seguir:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
  4. Alterne para o modo Folha de Dados e você verá apenas um registro:

    MáxDeData de Recebimento SomaDeQuantidade
    05/04/2006 510
  5. Combine essas duas consultas em uma consulta união para anexar o registro com a quantidade total aos 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. Alterne para o modo Folha de Dados e você verá as quatro compras com a soma de cada uma seguida de um registro que totaliza a quantidade:

    Data de recebimento Quantidade
    22/01/2006 60
    22/01/2006 100
    04/04/2006 50
    05/04/2006 300
    05/04/2006 510

Isso abrange os princípios básicos da adição de totais em uma consulta união. Também poderá querer incluir valores fixos em ambas as consultas, como "Detalhe" e "Total" para separar visualmente o registo total dos outros registos. Revise usando valores fixos na seção Combinar três ou mais tabelas ou consultas em uma consulta união.

Trabalhar com registros distintos em consultas união usando UNION ALL

As consultas união no Access por padrão incluem apenas registros distintos. Mas e se você quiser incluir todos os registros? Outro exemplo pode ser útil nesse caso.

Na seção anterior, mostramos como criar um total em uma consulta união. Modifique essa consulta SQL união para incluir Product ID = 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];

Alterne para o modo Folha de Dados e você verá um resultado um tanto enganador:

Data de recebimento Quantidade
22/01/2006 100
22/01/2006 200

Claro que um registo não devolve o dobro da quantidade total.

Verá este resultado porque, num dia, a mesma quantidade de chocolates foi vendida duas vezes, conforme registado na tabela Detalhes da Nota de Encomenda. Veja um resultado de consulta seleção simples mostrando os dois registros no banco de dados de exemplo da Northwind:

ID do pedido de compra Produto Quantidade
100 Northwind Traders - Chocolate 100
92 Northwind Traders - Chocolate 100

Na consulta união anteriormente indicada, pode ver que o campo ID da Nota de Encomenda não está incluído e que os dois campos não constituem dois registos distintos.

Se quiser incluir todos os registos, utilize UNION ALL em vez de UNION no .SQL É provável que isto afete a ordenação dos resultados, pelo que também poderá querer incluir uma ORDER BY cláusula para determinar uma sequência de ordenação. Eis a modificação SQL com base no exemplo 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];

Alterne para o modo Folha de Dados e você deverá ver todos os detalhes além de um total como o último registro:

Data de recebimento Total Quantidade
22/01/2006 100
22/01/2006 100
22/01/2006 Total 200

Usar uma consulta união para filtrar registros em um formulário por meio de um controle de caixa de combinação

Um uso comum para uma consulta união é o de servir como fonte de registro para um controle de caixa de combinação em um formulário. Você pode usar essa caixa de combinação para marcar um valor para filtrar os registros do formulário. Por exemplo, filtrando os registros de funcionários por cidade.

Para ver como isso funciona, veja outro exemplo que você pode criar no banco de dados de exemplo da Northwind para ilustrar esse cenário.

  1. Crie uma consulta selecionar simples com esta SQL sintaxe:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
    
  2. Alterne para o modo Folha de Dados e você verá os seguintes resultados:

    Cidade Filtro
    São Paulo São Paulo
    Palmares Palmares
    Fortaleza Fortaleza
    Rio de Janeiro Rio de Janeiro
    São Paulo São Paulo
    Fortaleza Fortaleza
    São Paulo São Paulo
    Fortaleza Fortaleza
    São Paulo São Paulo
  3. Olhando para esses resultados você poderá não ver muito valor. No entanto, expanda a consulta e transforme-a numa consulta união com o seguinte SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
    
  4. Alterne para o modo Folha de Dados e você verá os seguintes resultados:

    Cidade Filtro
    <Todos> *
    Palmares Palmares
    Rio de Janeiro Rio de Janeiro
    Fortaleza Fortaleza
    São Paulo São Paulo

    O Access efetua uma união dos nove registos, anteriormente apresentados, com valores de campo fixos de <Todos> e "*". Uma vez que esta cláusula união não contém UNION ALL, o Access devolve apenas registos distintos. Isto significa que cada cidade é devolvida apenas uma vez com valores idênticos fixos.

  5. Agora que você tem uma consulta união concluída e que exibe cada nome de cidade apenas uma vez, juntamente com uma opção que efetivamente marca todas as cidades, você pode usar essa consulta como fonte de registro para uma caixa de combinação em um formulário. Usando este exemplo específico como modelo, você poderia criar um controle de caixa de combinação no formulário, definir essa consulta como uma fonte de registro, definir a propriedade Largura de Coluna do filtro Coluna como 0 (zero) para ocultá-la visualmente e, em seguida, definir a propriedade Coluna Associada como 1 para indicar o índice da segunda coluna. Filter Na propriedade do próprio formulário, pode adicionar código como o seguinte para ativar um filtro de formulário com o valor selecionado no controlo da caixa de combinação:

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

    Em seguida, o utilizador do formulário pode filtrar os registos de formulário para um nome de cidade específico ou selecionar <Todos> para listar todos os registos de todas as cidades.

Início da Página