Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Prezados,
Boa tarde!
Estou dando os primeiros passos no QlikView e me deparei com o seguinte cenário:
Possuo as seguintes tabelas:
CONTRATO
FONTE_RECURSO_CONTRATO
Um determinado contrato pode está associado a mais de uma fonte de recurso (FONTERECUR_CD), nesse caso devo verificar qual o maior valor do campo GDPCONTR_SQ e utilizar a Fonte de Recurso associada a ele.
FONTERECUR_CD | FONTERECUR_SQ | CONTR_NU | GDPCONTR_SQ | VALOR |
---|---|---|---|---|
0103002851 | 1 | 1010 | 1 | 10 |
0103002851 | 2 | 1010 | 1 | 5 |
0132000000 | 1 | 1010 | 2 | 1 |
0140002851 | 3 | 1010 | 3 | 10 |
Dei uma pesquisada e os exemplos recomendam utilizar a função Max()recebendo uma agregação, realizei algumas tentativas aqui mas sem sucesso, vocês possuem alguma sugestão de como devo proceder? algum exemplo mais prático?
Segue o LOAD da tabela
FONTE_RECURSO_CONTRATO:
LOAD
FONTERECUR_CD,
FONTERECUR_SQ,
CONTR_NU,
CONTR_SQ,
VALOR
FROM
(qvd);
Obrigado!
Kleiton,
Perfeito. No primeiro momento havia pensado exatamente com inner join,
Uma outra solução que eu faria seria carregar o max igual vc fez. Juntaria em um campo por exemplo Max(GDPCONTR_SQ)&'|'&GDPCONTR_NU As novo campo.
Ai depois na sua tabela principal faria um exists, entretanto não fiz o teste para ver se funciona ... Creio que deve funcionar também haha.
Abs
Kleiton,
Ok. Mas neste caso qual devo utilizar?
FONTERECUR_CD, FONTERECUR_SQ, CONTR_NU, GDPCONTR_SQ, VALOR
0103002851, 1, 1010, 1, 10
0103002851, 2, 1010, 1, 5
Abs.
Fabio Nakashigue
Fábio,
Boa tarde!
Desculpe pelo erro, acabei esquecendo de um campo importante nessa validação. (FTRECCONTR_IN_EXC_LOGICA)
Para esse campo devo validar qual registro está como N.
Acredito que consegui o resultado esperado tratando dessa forma:
FONTE_RECURSO_CONTRATO:
LOAD
FONTERECUR_CD,
FONTERECUR_CD & '|' & FONTERECUR_SQ & '|' & GDPCONTR_NU as Chave,
GDPCONTR_SQ,
FTRECCONTR_IN_EXC_LOGICA,
FONTERECUR_SQ,
GDPCONTR_NU,
FTRECCONTR_VL_ASSINADO
FROM
(qvd);
Inner Join (FONTE_RECURSO_CONTRATO)
LOAD
MAX(GDPCONTR_SQ) as GDPCONTR_SQ,
GDPCONTR_NU
Resident FONTE_RECURSO_CONTRATO
where FTRECCONTR_IN_EXC_LOGICA = 'N'
group by GDPCONTR_NU;
GDP_CONTRATO:
LOAD
CONTR_NU as [Numero do Contrato],
CONTR_NU & '|' & GDPCONTR_SQ as ChaveContrato,
TPORICONTR_CD as ChaveTipoOrigemContrato,
ORIGDIVD_CD as ChaveOrigemDivida,
GDPCONTR_NM,
ORG_ID,
PTOATEND_CD,
CONTABAN_NU,
UG_CD,
GESTAO_CD,
FROM
(qvd);
Você utilizou outra forma para retornar essa informação?
Obrigado pela ajuda!
Kleiton,
Perfeito. No primeiro momento havia pensado exatamente com inner join,
Uma outra solução que eu faria seria carregar o max igual vc fez. Juntaria em um campo por exemplo Max(GDPCONTR_SQ)&'|'&GDPCONTR_NU As novo campo.
Ai depois na sua tabela principal faria um exists, entretanto não fiz o teste para ver se funciona ... Creio que deve funcionar também haha.
Abs
Entendi, obrigado pela ajuda Fábio!