Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
kkmoraes
Contributor III
Contributor III

Selecionar o maior valor em um campo

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_CDFONTERECUR_SQCONTR_NUGDPCONTR_SQVALOR
010300285111010110
01030028512101015
01320000001101021
014000285131010310

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!

Labels (2)
1 Solution

Accepted Solutions
fabionakashigue
Partner - Creator
Partner - Creator

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

View solution in original post

4 Replies
fabionakashigue
Partner - Creator
Partner - Creator

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

kkmoraes
Contributor III
Contributor III
Author

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!

fabionakashigue
Partner - Creator
Partner - Creator

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

kkmoraes
Contributor III
Contributor III
Author

Entendi, obrigado pela ajuda Fábio!