Mais uma vez obrigado, Samuel, pelas explicações, agora vou deixar aqui o problema em seu todo:
Bom, vou tentar explicar da melhor forma possível agora já que tentei bastante aqui e não consegui chegar na solução.
Essa é minha query "cabeçalho" do relatório. Basicamente a Amostra é única, porém na tabela filha podemos ter vários médicos distintos ou convênios que o paciente está usando. Logo, eu acesso essa tabela única e já subdivido tudo na mesma query:
Select distinct A.REGISTRO
, A.PRONTUARIO
, P.Nome
, S.descricao as DESTINO
, O.descricao as ORIGEM
, A.DATA_FATURA
, A.DATA_ENTRADA
, A.DATA_ENTREGA
, A.HORA_ENTRADA
, A.COLETADOR
, C.NOME as Coletador_Nome
, E.CRM
, M.NOME as MEDICO
, E.CONVENIO
, A.LEITOSETOR
, A.FLAG_COLETAEXTERNA
From AMOSTRAS A
Left Join pacientes P on P.prontuario = A.prontuario
Left Join coletadores C on C.codigo = A.coletador
Left join Postos O on O.codigo = A.origem
Left join Postos S on S.codigo = A.destino
Left join AMOSTRAS_EXAMES E on E.REGISTRO = A.REGISTRO
--Left join CONVENIO V on V.SIGLA = E.CONVENIO
Left join MEDICOS M on M.CRM = E.CRM
Where A.REGISTRO = :registro
O resultado quando eu lanço o parâmetro com o código de algum registro seria assim:
('CH1033', 10010181, 'BENTA MAYER MENGUE', 'CACHOEIRINHA', 'CACHOEIRINHA', NULL, '17-MAR-2010', NULL, NULL, 20, 'Nilza Maria da Silva Alves', 15323, 'ADAO ROGERIO L. MACHADO', 'UNIMED', NULL, 'N');
('CH1033', 10010181, 'BENTA MAYER MENGUE', 'CACHOEIRINHA', 'CACHOEIRINHA', NULL, '17-MAR-2010', NULL, NULL, 20, 'Nilza Maria da Silva Alves', 22983, 'VANIA FRACALOSSI', 'PARTICULAR', NULL, 'N');
('CH1033', 10010181, 'BENTA MAYER MENGUE', 'CACHOEIRINHA', 'CACHOEIRINHA', NULL, '17-MAR-2010', NULL, NULL, 20, 'Nilza Maria da Silva Alves', 22983, 'VANIA FRACALOSSI', 'UNIMED', NULL, 'N');
Aí está ok, o cabeçalho está funcionando.
A seguir preciso trazer as solitações de exames desse registro (CH1033), no entanto os exames são subdividos por categorias. Então eu consulto as categorias que tem dentro desse registro:
Select distinct A.Registro, A.convenio, A.CRM, E.Categoria
From AMOSTRAS_EXAMES A
Left Join EXAMES E on E.Codigo = A.EXAME
Where A.Registro = :Registro
Order by A.CRM, A.CONVENIO, E.Categoria
Resultado para o caso CH1033:
('CH1033', 'UNIMED', 15323, 1);
('CH1033', 'UNIMED', 15323, 8);
('CH1033', 'PARTICULAR', 22983, 2);
('CH1033', 'UNIMED', 22983, 1);
('CH1033', 'UNIMED', 22983, 3);
('CH1033', 'UNIMED', 22983, 5);
Como dá pra observar, dentro desse registro Tem como convênio a UNIMED e PARTICULAR. Dois médicos (15323 e 22983) e as categorias 1 e 8 para o primeiro médico, 2 para o segundo médico com o convênio particular e 1, 3 e 5 para o mesmo segundo médico porém com convênio unimed.
DBPipeline ficou com o Master da primeira tabela (cabecalho), e masterfield como (Registro -> Registro, CRM -> CRM, Convenio -> Convenio). (funcionou ok)
Agora vem a última etapa que são os resultados dos exames para essas categorias:
Select distinct A.Registro, A.convenio, A.CRM, E.Categoria, A.EXAME, A.MATERIAL, E.Prioridade
From AMOSTRAS_EXAMES A
Left Join EXAMES E on E.Codigo = A.EXAME
Where A.Registro = :Registro
Order by A.CRM, A.CONVENIO, E.Categoria, E.Prioridade
('CH1033', 'UNIMED', 15323, 1, 'TP', 1, 6);
('CH1033', 'UNIMED', 15323, 8, 'T3', 1, 114);
('CH1033', 'UNIMED', 15323, 8, 'T4', 1, 116);
('CH1033', 'PARTICULAR', 22983, 2, 'GLI', 1, 1);
('CH1033', 'PARTICULAR', 22983, 2, 'HBG', 1, 7);
('CH1033', 'PARTICULAR', 22983, 2, 'TRI', 1, 11);
('CH1033', 'PARTICULAR', 22983, 2, 'COL', 1, 12);
('CH1033', 'PARTICULAR', 22983, 2, 'HDL', 1, 13);
('CH1033', 'UNIMED', 22983, 1, 'HEM', 1, 1);
('CH1033', 'UNIMED', 22983, 3, 'HIV1', 1, 13);
('CH1033', 'UNIMED', 22983, 5, 'EQU', 2, 14);
Esse é o resultado, todos os exames solicitados já separados pelas categorias e médicos/convênios.
DBPipeline tem como MasterData a tabela anterior, Categoria, e como MasterField (CRM ->CRM, Convenio -> Convenio, Categoria -> Categoria)
Funcionou ok, o nome dos exames ficou abaixo da categoria, médico e convênio correto.
Meu problema vem nas tabelas onde são gravados os resultados, são várias... mas como estou remodelando o relatório peguei para começar a tabela de "diversos", nela vão exames variados de mesma formatação.
Diversos:
Select D.REGISTRO
, E.METODO
, E.DESCRICAO as EXAME_NOME
, E.REFERENCIA
, E.PRIORIDADE
, D.EXAME
, D.MATERIAL
, D.NORMAL
, D.NORMAIS
, D.POSITIVO
, D.REAGENTE
, D.INDICE
, D.RESULTADO
, D.OBSERVACAO
, M.DESCRICAO as MATERIAL_NOME
, E.UNIDADE
, E.OBSERVACAO as NOTA
, E.Categoria
, A.Convenio
, A.CRM
from RESULTADO_DIVERSOS D
Left Join Material M on M.CODIGO = D.MATERIAL
Left Join EXAMES E on E.CODIGO = D.EXAME
Left Join Amostras_Exames A on D.Registro = A.Registro and A.Exame = D.Exame and A.Material = D.Material
Where D.REGISTRO = :REGISTRO
Order by A.CRM, A.CONVENIO, E.Categoria, E.Prioridade
Aqui aparecem os resultados de todos os exames, aí vem o meu problema que não consigo ligar corretamente o DBPipeline nos masterfields. Não aparece o resultado do exame abaixo do exame correto. Em uma das tentativas até apareceu corretamente o resultado abaixo do exame, no entanto só retornaram 2 resultados de todos que deveriam ter aparecido.
Bom, sei que parece meio desespero porque postei todas as SQLs e toda a lógica do que estou fazendo, mas estou tentando resolver esse assunto tem algum tempo e não consigo desenvolver essa parte final. Isso é uma remodelagem da saída dos relatórios, por isso estou refazendo. Claro que provavelmente vão encontrar algum jeito diferente que eu fiz a minha sql, foi como eu desenvolvi na hora e acredito que até há jeito melhor de fazer, mas enfim...
Agradeço se alguém puder colaborar com qualquer sugestão!
Abraços.