6 Replies Latest reply on Feb 26, 2019 9:27 AM by Luciano Vasconcelos

    União de consulta personalizada em diferentes bancos

    Rafael Marques

      Pessoal precisando de uma ajuda.

       

           Estou tendo que construir uma análise utilizado uma consulta personalizada e devo unir os dados de bancos diferentes, ao total são sete bancos, mas em todos eles as tabelas e toda estrutura é idêntica. O motivo é por cada banco está interno em cada local.

          

      Exemplo da consulta 1: Devo trazer os dados de leitos ocupados de todos os banco e com isso criar uma dimensão onde identifique o nome do hospital que no caso é o nome do banco, pois dentro dos dados não há como identificar o nome do hospital, apenas pelo nome do banco.

       

       

      BANCOS

       

      CIDH_PACIENTE

      CSDL_PACIENTE

      CSM_PACIENTE

      HGCC_PACIENTE

      HGF_PACIENTE

      HSJ_PACIENTE

      IPC_PACIENTE

       

       

      1 - Quantidade de Leitos ocupados.

       

       

      select

      c.dsc_clinica, count(isn_leito) as leitos_ocupados

      from

      medpoint.t_leito l

      inner join medpoint.t_enfermaria e on e.isn_enfermaria = l.isn_enfermaria

      inner join medpoint.t_clinica c on c.isn_clinica = e.isn_clinica

      where

      l.isn_leito in (select isn_leito from medpoint.t_internacao_leito where dat_alta is null)

      and l.flg_extra = 'N'

      group by c.dsc_clinica

      order by 1

       

       

      2 - Quantidade de Leitos Livres.

      select

      c.dsc_clinica, count(l.isn_leito) as leitos_livres

      from

      medpoint.t_leito l

      inner join medpoint.t_enfermaria e on e.isn_enfermaria = l.isn_enfermaria

      inner join medpoint.t_clinica c on c.isn_clinica = e.isn_clinica

      where

      l.isn_leito not in (select isn_leito from medpoint.t_internacao_leito where dat_alta is null)

      and l.isn_leito not in (select isn_leito from medpoint.t_leito_interditado where dat_liberacao is null)

      and l.isn_leito not in (select isn_leito from medpoint.t_leito_reserva where dat_desfazer is null)

      and l.flg_extra = 'N'

      and l.flg_ativo = 'S'

      group by c.dsc_clinica

      order by 1

       

       

      3 - Leitos Interditados

      select

      c.dsc_clinica, count(l.isn_leito) as leitos_interditados

      from

      medpoint.t_leito l

      inner join medpoint.t_enfermaria e on e.isn_enfermaria = l.isn_enfermaria

      inner join medpoint.t_clinica c on c.isn_clinica = e.isn_clinica

      where

      l.isn_leito in (select isn_leito from medpoint.t_leito_interditado where dat_liberacao is null)

      and l.flg_extra = 'N'

      and l.flg_ativo = 'S'

      group by c.dsc_clinica

      order by 1

        • 1. Re: União de consulta personalizada em diferentes bancos
          Luciano Vasconcelos

          Bom dia.

           

          É mais ou menos assim:

           

          select

          c.dsc_clinica,

          count(isn_leito) as leitos_ocupados,

          NULL as leitos_livres,

          NULL as leitos_interditados

          from medpoint.t_leito l

          inner join medpoint.t_enfermaria e on e.isn_enfermaria = l.isn_enfermaria

          inner join medpoint.t_clinica c on c.isn_clinica = e.isn_clinica

          where l.isn_leito in (select isn_leito from medpoint.t_internacao_leito where dat_alta is null)

          and l.flg_extra = 'N'

          group by c.dsc_clinica

           

          UNION

           

           

          select

          c.dsc_clinica,

          NULL as leitos_ocupados,

          count(l.isn_leito) as leitos_livres,

          NULL as leitos_interditados

          from medpoint.t_leito l

          inner join medpoint.t_enfermaria e on e.isn_enfermaria = l.isn_enfermaria

          inner join medpoint.t_clinica c on c.isn_clinica = e.isn_clinica

          where l.isn_leito not in (select isn_leito from medpoint.t_internacao_leito where dat_alta is null)

          and l.isn_leito not in (select isn_leito from medpoint.t_leito_interditado where dat_liberacao is null)

          and l.isn_leito not in (select isn_leito from medpoint.t_leito_reserva where dat_desfazer is null)

          and l.flg_extra = 'N'

          and l.flg_ativo = 'S'

          group by c.dsc_clinica

           

           

          UNION

           

           

          select

          c.dsc_clinica,

          NULL as leitos_ocupados,

          NULL as leitos_livres,

          count(l.isn_leito) as leitos_interditados

          from medpoint.t_leito l

          inner join medpoint.t_enfermaria e on e.isn_enfermaria = l.isn_enfermaria

          inner join medpoint.t_clinica c on c.isn_clinica = e.isn_clinica

          where l.isn_leito in (select isn_leito from medpoint.t_leito_interditado where dat_liberacao is null)

          and l.flg_extra = 'N'

          and l.flg_ativo = 'S'

          group by c.dsc_clinica

           

          Coloquei NULL para não dar errado caso você faça média. Se não for fazer médias pode colocar o ao invés de NULL.

          • 2. Re: União de consulta personalizada em diferentes bancos
            Rafael Marques

            Luciano, os sete bancos estão no mesmo servidor, tentei utilizar todos ao mesmo tempo usando a opção de conexões da fonte de dados, consigo realizar a consulta em cada um deles, mas vi que não consigo realizar a união da consulta personalizada, pois ela substitui.

             

            Utilizando essa consulta que você passou ele irá fazer a união em todos os bancos?

            • 3. Re: União de consulta personalizada em diferentes bancos
              Luciano Vasconcelos

              Em teoria sim mas vc vai precisar ter uma conexão para cada banco. Precisa testar se não vai se perder.

              • 5. Re: União de consulta personalizada em diferentes bancos
                Rafael Marques

                Luciano, desculpe a demora na resposta, não havia visto o retorno.

                 

                Devido a ser uma POC no cliente acabei construindo 7 painéis, um para cada hospital. No final a saída foi ter uma história com os sete painéis, assim servindo como um tipo de navegação.

                 

                Mas vou testar mais uma vez a interação desta forma que você explicou, pois assim conseguiria realizar analises entre os hospitais. Mas também foi dado como opção pelo cliente em realizar um ETL para consolidação dos dados dos sete bancos em somente um para o Tableau consumir estes dados.

                • 6. Re: União de consulta personalizada em diferentes bancos
                  Luciano Vasconcelos

                  Cara, isso deu muito mais trabalho.

                  Você podia ter valiadado com duas e só algumas colunas.