Utilizar mais de uma tabela na consulta de um relatório


(Gabriel Rodrigues) #1

Olá,

Estou desenvolvendo um relatório onde terei que consultar duas tabelas do banco de dados, sendo uma delas uma tabela com os dados da minha aplicação e a outra tabela é a tabela com os alarmes da aplicação.

Gostaria de saber como faço para filtrar as duas tabelas de forma distinta na consulta do relatório.

Quero selecionar um período, por exemplo, as 7:00 as 17:00 e retornar os valores da tabela de dados e da tabela de alarmes.


(Luiz Fernando Freire dos Reis) #2

@Eng_Gabriel, boa tarde.

Verifica, por favor, se estes artigos lhe ajudam:

https://www.devmedia.com.br/introducao-ao-sql-pesquisa-em-multiplas-tabelas/17006

Sds.


(Gabriel Rodrigues) #3

Olá @Fernando, dei uma olhada nesses artigos e inclusive em outras fontes também para tentar juntar as tabelas, mas sem sucesso.

O que estou tentando é isso:

SELECT ETE_Historico.E3TimeStamp,ETE_Historico.SOP_1_Pressao_1
FROM ETE_Historico
WHERE ( ETE_Historico.E3TimeStamp >= #<%DATAINICIAL%># AND ETE_Historico.E3TimeStamp <= #<%DATAFINAL%># )
UNION ALL
SELECT Alarms.E3TimeStamp,Alarms.Message
FROM Alarms
WHERE ( Alarms.E3TimeStamp >= #<%DATAINICIAL%># AND Alarms.E3TimeStamp <= #<%DATAFINAL%># )

Não dá erro, mas a consulta trava e fica eternamente processando.
Tentei também com JOIN mas o problema é que para cada resultado de uma tabela ele retorna todas as linhas da outra.
Vi exemplos de igualar chaves, porém no meu caso nenhum campo será igual, já que os alarmes são registrados em tempos diferentes da tabela de dados.

A minha intenção é juntar esses dois select na consulta do relatório.

Será que teria como fazer direto na consulta?
Ou será que tem como mudar a consulta em runtime na hora em que o relatório está sendo gerado?
Por exemplo, na primeira página eu uso a tabela de dados que retorna valores do processo, após essa o cliente solicitou para mostrar no relatório todas as ocorrências de alarmes naquele período, então após gerar as páginas de dados mudar a consulta para buscar os alarmes


(Luiz Fernando Freire dos Reis) #4

@Eng_Gabriel,

Entendi.

Sobre este final:

Poderiam ser dois relatório separados, mas com o mesmo período de dados?

Sds.


(Gabriel Rodrigues) #5

Teria que ser tudo em um arquivo só, pois depois é impresso e assinado. O relatório é gerado diariamente e tem algumas informações que são preenchidas pelo operador na hora de gerar o relatório também.

Se tiver como gerar os dois e unir em um arquivo apenas, até poderia ser.


(Luiz Fernando Freire dos Reis) #6

O que acha de em um relatório inserir o cabeçalho e as informações de Alarmes, por exemplo, e no outro relatório só trazer as informações de Pressão sem o cabeçalho? Desta forma, após imprimir, bastaria anexar um ao outro.

Neste caso, dependendo do tipo de informação, pode ser compartilhado em ambos os relatórios intermediado por uma tag.

Gostaria de tentar desta forma?


(Gabriel Rodrigues) #7

Bom, eu precisaria ver com o cliente pois eu salvo esses arquivos em uma máquina, então diariamente teriam dois arquivos distintos e também é pretendido mandar esses relatórios por e-mail quando forem gerados.
Acredito que não fica muito bom assim.
Mas verei.

Você acha que não tem como fazer em um relatório só?


(Luiz Fernando Freire dos Reis) #8

Entendi.

Acredito que não tenha como fazer em um único relatório, neste caso, devido a não compatibilidade das tabelas. Podemos ver se mais alguém tem uma solução sobre isto.

Também farei mais alguns testes e conseguindo algum resultado, coloco aqui.

Sds.


(Gabriel Rodrigues) #9

Beleza @Fernando

Sds
Gabriel


#10

Penso que vc tenha que igualar número de campos para então fazer a união, e se for o caso fazer um group by.

(select b.E3TimeStamp as E3TimeStamp, null as Message, b.SOP_1_Pressao_1 as FieldName from ETE_Historico b)
union all
(select a.E3TimeStamp as E3TimeStamp, a.Message as Message, null as FieldName from Alarms a)
order by E3TimeStamp