Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Subconsulta

Pessoal é possível fazer uma consulta no set analisys em forma de subconsulta? Eu preciso contar todos os registros de uma tabela que o nome (CI) esteja presente em outra tabela. Seria esse SQL que eu estou tentando transformar em set analysis  sem sucesso até então.

select  CI from SLOAVAIL1M1

where CI in (

select  LOGICAL_NAME   from DEVICE2M1

where TYPE = 'bizservice'

and CGU_MONITORACAO is null or CGU_MONITORACAO = 0

)

Ou alguma outra forma para resolver isso.

Obrigado

Labels (1)
1 Solution

Accepted Solutions
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

João,  se fizer na carga ?

Tmp:

LOAD

       LOGICAL_NAME           as   CI ;

select  LOGICAL_NAME   from DEVICE2M1

where TYPE = 'bizservice'   and CGU_MONITORACAO is null or CGU_MONITORACAO = 0;

//

//

//

Tabela:

LOAD

       CI

        Where Exists(CI);

select  CI from SLOAVAIL1M1;

O Where Exists(CI)  do segundo LOAD somente vai quando já tiver (ou seja, existe) na memoria lido pelo LOAD da tabela Tmp.

Assim, uma expressão simples (count por exemplo) vai funcionar.

Mas, pode ser que não lhe atenda pois não sei direito o que você precisa......

furtado@farolbi.com.br

View solution in original post

4 Replies
TiagoCardoso
Creator II
Creator II

Boa tarde,

Se você carregar corretamente os campos no qlikview e estabelecer relações de modo correto, tem como sim, ficaria mais ou menos assim:

NULLCOUNT({<TYPE={'bizservice'}>} CI)

+

COUNT({<TYPE={'bizservice'}>, <CGU_MONITORACAO={0}>} CI)

Contagem de Nulos e de Zeros.

Espero que tenha sido útil.

Att,

Tiago Cardoso

TiagoCardoso
Creator II
Creator II

Acredito também que se você utilizar esse SQL para formar apenas 1 campo, ele já sairia com o valor que você precisa, não sendo necessária a utilização de expressões, mas daí seria um campo em uma tabela flutuante, porém teria o valor que você precisa.

Bom, tudo depende para qual fim você vai utilizar futuramente também.

Abraços.

TiagoCardoso
Creator II
Creator II

Pensando bem, você quer apenas os registros contidos na tabela DEVICE2M1 né!?

Quando carregar esta tabela [DEVICE2M1] no script de carga, faça o seguinte:

-Crie um campo só para identificar o nome da tabela;

DEVICE2M1:

LOAD

    ...,

    ...,

    'DEVICE2M1' as NomeTabela

FROM [...]

-Pode fazer isto em outras tabelas, caso precise buscar uma informação acerca daquela tabela apenas.

Aí sim podemos atribuir isto em nossa expressão SET! ...

Ficaria assim:


NULLCOUNT({<TYPE={'bizservice'}>,<NomeTabela='DEVICE2M1'>} CI)

+

COUNT({<TYPE={'bizservice'}>, <CGU_MONITORACAO={0}>, <NomeTabela='DEVICE2M1'>} CI)

Acredito que agora resolveria seu problema. perdão postar tantas vezes, não havia interpretado seu problema de maneira correta na primeira vez em que li.

Att,

Tiago Cardoso


afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

João,  se fizer na carga ?

Tmp:

LOAD

       LOGICAL_NAME           as   CI ;

select  LOGICAL_NAME   from DEVICE2M1

where TYPE = 'bizservice'   and CGU_MONITORACAO is null or CGU_MONITORACAO = 0;

//

//

//

Tabela:

LOAD

       CI

        Where Exists(CI);

select  CI from SLOAVAIL1M1;

O Where Exists(CI)  do segundo LOAD somente vai quando já tiver (ou seja, existe) na memoria lido pelo LOAD da tabela Tmp.

Assim, uma expressão simples (count por exemplo) vai funcionar.

Mas, pode ser que não lhe atenda pois não sei direito o que você precisa......

furtado@farolbi.com.br