Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alex_DTP

[Resolvido] Consulta com subconsulta

Recommended Posts

Tenho 2 tabelas (exemplo)

 

tblDocumentos

docsID - Documento

1 - Documento tal a

2 - Documento tal b

3 - Documento tal c

...

 

tblTramitação

tramID - docsID - Destino - Data

1 - 1 - Seção a - 17/12/2008

2 - 2 - Seção b - 16/12/2008

3 - 3 - Seção b - 14/12/2008

4 - 2 - Seção b - 15/12/2008

5 - 3 - Seção a - 16/12/2008

 

Preciso que: ao pesquisar "destino" como "Seção b", me retornasse todos os documentos em que a última data da tramimitação contivesse "Seção b".

 

2 - 2 - Seção b - 16/12/2008

3 - 3 - Seção b - 14/12/2008

 

Sei que terei que usar uma subconsulta.

 

Seria: listar todos os documentos em tramitação agrupando pela última data e então selecionar somente os que contivessem a seção pesquisada.

 

Acho que o caminho é mais ou menos este:

SELECT tblDocumentos.ID, tblDocumentos.Documento, tblTramitação.tramID, tblTramitação.docsID, tblTramitação.Destino, tblTramitação.Data
FROM tblDocumentos LEFT JOIN tblTramitação ON tblDocumentos.ID = tblTramitação.ID
WHERE (((tblTramitação.tramID) In (SELECT tramID, MAX(Data) FROM tblTramitação WHERE ([tblTramitação].[Destino]=[Formulários]![frmPesquisa]![Combinação38]))))

Mas não está funcionando. O Access dá a seguinte mensagem:

"Você gravou uma subconsulta que pode retornar mais de um campo sem usar a palavra EXISTS na cláusula FROM da consulta principal..."

 

Já tentei também de várias outras formas, mas não consegui.

 

Talvez nem seja assim, então se alguém puder me ajudar, agradeço.

 

Alex

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou postando aqui um bd de exemplo para facilitar o entendimento do meu problema.

 

Segue o exemplo:

consultaUltData.zip

 

Observem que na qryDestino_1 buscando, por exemplo, por "Seção b" ele me retorna entre os resultados o "Documento A" que a sua última tramitação é na "Seção c".

Preciso que me retorne os documentos que sua última tramitação tenha sido na "Seção b"

 

Na qryDestino_2, que me parece mais apropriada, o access dá a mensagem de erro

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

R E S O L V I D O !

 

Consegui assim:

 

Fiz uma query filtrando pelo último ID da tramitação dos documentos, e não pela data. Assim obtive os resultados apenas da última tramitação dos documentos.

SELECT tblTramitação.docsID, Max(tblTramitação.tramID) AS MáxDetramID
FROM tblTramitação
GROUP BY tblTramitação.docsID;
Então foi só criar uma relação desta qry com a tblTramitação "amarrando" o resultado na qryDestino

SELECT tblDocumentos.docsID, tblDocumentos.Documento, tblTramitação.Destino, tblTramitação.Data
FROM qryUltimaTramitacao INNER JOIN (tblDocumentos INNER JOIN tblTramitação ON tblDocumentos.docsID=tblTramitação.docsID) ON [qryUltimaTramitacao].MáxDetramID=tblTramitação.tramID
GROUP BY tblDocumentos.docsID, tblDocumentos.Documento, tblTramitação.Destino, tblTramitação.Data
HAVING (((tblTramitação.Destino)="Seção b"));
Ufa!

 

Segue o arquivo: consultaUltData.zip

 

Alex

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.