4 Replies Latest reply: Dec 5, 2016 5:01 PM by Alessandro Furtado RSS

    Subconsulta

    Joao Eduardo Vasconcelos

      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

        • Re: Subconsulta
          Tiago Fernando Cardoso

          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

          • Re: Subconsulta
            Tiago Fernando Cardoso

            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.

            • Re: Subconsulta
              Tiago Fernando Cardoso

              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


              • Re: Subconsulta
                Alessandro Furtado

                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......