Pular para o conteúdo
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #96439
    luan
    Participante

      Olá galera, gostaria de saber se é possivel em uma unica query fazer o seguinte:
      abaixo a query:
      SELECT CNPJ,FANTASIA FROM
      ( SELECT P.CNPJ, D.FANTASIA
      FROM GUIA_DADO H
      JOIN GUIA_PROCEDIMENTO A ON ( H.IDGUIADADO = A.IDGUIADADO )
      JOIN PRESTADOR_CONTRATO G ON ( A.IDCONTRATO = G.ID )
      JOIN PRESTADOR_DETAIL P ON (P.IDDETAIL = G.IDPRESTADORDETAIL)
      JOIN PRESTADOR_DADO D ON ( P.IDPRESTADOR = D.IDPRESTADOR )
      WHERE A.STATUS = 'LIBERADO'
      AND A.STATUSAUDITORIA = R('NAO AUDITADO')
      AND EXTRACT(MONTH FROM H.DATAEMISSAO) = 09
      GROUP BY P.CNPJ, D.FANTASIA
      UNION ALL
      SELECT P.CNPJ, D.FANTASIA
      FROM GUIA_DADO H
      JOIN GUIA_CONSULTA A ON ( H.IDGUIADADO = A.IDGUIADADO )
      JOIN PRESTADOR_CONTRATO G ON ( A.IDCONTRATO = G.ID )
      JOIN PRESTADOR_DETAIL P ON (P.IDDETAIL = G.IDPRESTADORDETAIL)
      JOIN PRESTADOR_DADO D ON ( P.IDPRESTADOR = D.IDPRESTADOR )
      WHERE A.STATUS = 'LIBERADO' AND A.FLAG = 'FINALIZADO'
      AND A.STATUSAUDITORIA = R('NAO AUDITADO')
      AND EXTRACT(MONTH FROM H.DATAEMISSAO) = 09
      GROUP BY P.CNPJ, D.FANTASIA

      ) GROUP BY CNPJ, FANTASIA
      Seguinte, junto com cada linha dessa query eu gostaria de trazer o valor total dos procedimentos, e os valores autorizados que está na tabela
      guia_procedimento ( coluna: valor, valorAutorizado )
      guia_consulta ( coluna: valor, valorAutorizado )

      Gostaria também de trazer a quantidade total de registros com status = ‘NAO AUDITADO’ que está na tabela:
      guia_procedimento ( coluna: statusAuditoria)
      guia_consulta ( coluna: statusAuditoria) e a quantidade total dos registros geral!

      Eu resolvi a principio realizando a primeira query normalmente como o código acima, e depois para cada registros fazia outras 4 consultas.
      – Uma para somar o total geral de registros + a soma dos valores.
      – Uma para trazer o total que já foi auditada
      Sendo o total de 4 consultas para cada registro, pois são 2 pesquisas na tabela guia_procedimento e outras 2 na tabela guia_consulta.

      Mas infelizmente o desempenho está horrível, travando a tela do usuário por 25 segundos antes de trazer o resultado.

      Alguém teria alguma dica, um caminho das pedras de como fazer isso tudo em uma query unica de maneira mais performática ?

      Muito obrigado galera

      Abraços

      #96442
      burga
      Participante

        Oi luan,

        Tem como postar as outras duas consultas que você fez? não entendi muito bem o que você está querendo trazer.

        Só a consulta que você postou, olhando rapidamente acho que dá pra tirar os group by das subqueries…

        #96443
        luan
        Participante

          Fala mestre Burga,

          então seguem abaixo:


          SELECT SUM(J.VALOR), SUM(J.VALORAUTORIZADOPGTO), COUNT()
          FROM GUIA_PROCEDIMENTO J
          JOIN GUIA_DADO H ON ( J.IDGUIADADO = H.IDGUIADADO )
          JOIN PRESTADOR_CONTRATO M ON ( J.IDCONTRATO = M.ID )
          JOIN PRESTADOR_DETAIL N ON ( M.IDPRESTADORDETAIL = N.IDDETAIL )
          WHERE N.CNPJ = '11111111111111'
          AND J.STATUS = 'LIBERADO'
          AND EXTRACT(MONTH FROM H.DATAEMISSAO) = 09


          SELECT COUNT()
          FROM GUIA_PROCEDIMENTO J
          JOIN GUIA_DADO H ON ( J.IDGUIADADO = H.IDGUIADADO )
          JOIN PRESTADOR_CONTRATO M ON ( J.IDCONTRATO = M.ID )
          JOIN PRESTADOR_DETAIL N ON ( M.IDPRESTADORDETAIL = N.IDDETAIL )
          WHERE N.CNPJ = '11111111111111'
          AND J.STATUS = 'LIBERADO'
          AND EXTRACT(MONTH FROM H.DATAEMISSAO) = 09
          AND J.STATUSAUDITORIA 'NAO AUDITADO'


          SELECT SUM(J.VALOR), SUM(J.VALORAUTORIZADOPGTO), COUNT()
          FROM GUIA_CONSULTA J
          JOIN GUIA_DADO H ON ( J.IDGUIADADO = H.IDGUIADADO )
          JOIN PRESTADOR_CONTRATO M ON ( J.IDCONTRATO = M.ID )
          JOIN PRESTADOR_DETAIL N ON ( M.IDPRESTADORDETAIL = N.IDDETAIL )
          WHERE N.CNPJ = '11111111111111'
          AND J.STATUS = 'LIBERADO'
          AND J.FLAG = 'FINALIZADO'
          AND EXTRACT(MONTH FROM H.DATAEMISSAO) = 09


          SELECT COUNT()
          FROM GUIA_CONSULTA J
          JOIN GUIA_DADO H ON ( J.IDGUIADADO = H.IDGUIADADO )
          JOIN PRESTADOR_CONTRATO M ON ( J.IDCONTRATO = M.ID )
          JOIN PRESTADOR_DETAIL N ON ( M.IDPRESTADORDETAIL = N.IDDETAIL )
          WHERE N.CNPJ = '11111111111111'
          AND J.STATUS = 'LIBERADO'
          AND J.FLAG = 'FINALIZADO'
          AND EXTRACT(MONTH FROM H.DATAEMISSAO) = 09
          AND J.STATUSAUDITORIA 'NAO AUDITADO'

          Para cada registro trazido daquela outra query, eu faço mais essas outras consultas para setar o vo no java.
          Certamente não é a melhor forma, mas como o prazo estava curto eu fiz para colocar em produção, mas agora quero arruma-lo pois está impactando na performance.

          Brigadão

          #96446
          burga
          Participante

            Se você quer juntar tudo em uma só consulta, você conseguiria fazer mais ou menos assim:

            SELECT CNPJ,FANTASIA, SUM(VL_PROC), SUM(VL_AUT_PROC), SUM(CONT_PROC_01), SUM(CONT_PROC_02), SUM(VL_CONS), SUM(VL_AUT_CONS), SUM(CONT_CONS_01), SUM(CONT_CONS_02) FROM (
            SELECT P.CNPJ, D.FANTASIA, SUM(A.VALOR) VL_PROC, SUM(A.VALORAUTORIZADOPGTO) VL_AUT_PROC, COUNT() CONT_PROC_01, COUNT(DECODE(A.STATUSAUDITORIA,'NAO AUDITADO',NULL,1)) CONT_PROC_02, NULL VL_CONS, NULL VL_AUT_CONS, NULL CONT_CONS_01, NULL CONT_CONS_02
            FROM GUIA_DADO H
            JOIN GUIA_PROCEDIMENTO A ON ( H.IDGUIADADO = A.IDGUIADADO )
            JOIN PRESTADOR_CONTRATO G ON ( A.IDCONTRATO = G.ID )
            JOIN PRESTADOR_DETAIL P ON (P.IDDETAIL = G.IDPRESTADORDETAIL)
            JOIN PRESTADOR_DADO D ON ( P.IDPRESTADOR = D.IDPRESTADOR )
            WHERE A.STATUS = 'LIBERADO'
            AND A.STATUSAUDITORIA = R('NAO AUDITADO')
            AND H.DATAEMISSAO
            BETWEEN TO_DATE('01/09/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy')
            AND LAST_DAY(TO_DATE('01/09/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy'))
            GROUP BY P.CNPJ, D.FANTASIA
            UNION ALL
            SELECT P.CNPJ, D.FANTASIA, NULL VL_PROC, NULL VL_AUT_PROC, NULL CONT_PROC_01, NULL CONT_PROC_02, SUM(A.VALOR) VL_CONS, SUM(A.VALORAUTORIZADOPGTO) VL_AUT_CONS, COUNT(
            ) CONT_CONS_01, COUNT(DECODE(A.STATUSAUDITORIA,'NAO AUDITADO',NULL,1)) CONT_CONS_02
            FROM GUIA_DADO H
            JOIN GUIA_CONSULTA A ON ( H.IDGUIADADO = A.IDGUIADADO )
            JOIN PRESTADOR_CONTRATO G ON ( A.IDCONTRATO = G.ID )
            JOIN PRESTADOR_DETAIL P ON (P.IDDETAIL = G.IDPRESTADORDETAIL)
            JOIN PRESTADOR_DADO D ON ( P.IDPRESTADOR = D.IDPRESTADOR )
            WHERE A.STATUS = 'LIBERADO' AND A.FLAG = 'FINALIZADO'
            AND A.STATUSAUDITORIA = R('NAO AUDITADO')
            AND H.DATAEMISSAO
            BETWEEN TO_DATE('01/09/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy')
            AND LAST_DAY(TO_DATE('01/09/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy'))
            GROUP BY P.CNPJ, D.FANTASIA
            ) GROUP BY CNPJ, FANTASIA ;

            Mas pode ter algum errinho aí pelo meio, mas acho que a idéia dá pra você tentar aproveitar… Espero que entenda o que eu tentei fazer!

            O lance da data eu troquei mais pro caso de haver um índice na coluna! Mas ainda assim, o lance do tunning, com certeza tem gente mais qualificada do que eu por aqui pra te ajudar melhor.

            #96448
            luan
            Participante

              Valeu Burga, vou adaptar, a princípio a parte dos count e sum retornaram errado, mas os registros vieram todos..

              Valeuu Abraços

              #96452
              luan
              Participante

                Não consegui achar o problema do porque os sum e count estão retornando 0, tem alguma ideia Burga?

                Valeuuuu

                #96454
                burga
                Participante

                  Oi luan,

                  Pra falar o que está ocorrendo eu teria que ter um ambiente igual ao seu aqui, com as tabelas e dados.

                  Outra coisa que eu não faço idéia do que seja é a condição
                  A.STATUSAUDITORIA = R('NAO AUDITADO')
                  qual função que é essa R e o que ela faz (olhando seus scripts, é provável que ela esteja sobrando)… Tente tirar essas condições e veja o que ocorre!!

                  Você executou as subqueries separadamente pra ver o que está sendo retornado?

                  Se ainda assim nao tiver retornando certo, e se você puder passar os create tables com alguns inserts de dados de exemplo, daria pra te ajudar melhor!!!

                  #96476
                  Anônimo

                    Como não tenho seu cenário, não posso garantir que dará certo.
                    Coloquei o flag no group by evitando o union.

                    SELECT A.FLAG,
                    P.CNPJ,
                    D.FANTASIA,
                    SUM(A.VALOR) VL_PROC,
                    SUM(A.VALORAUTORIZADOPGTO) VL_AUT_PROC,
                    COUNT(*) CONT_PROC_01,
                    COUNT(DECODE(A.STATUSAUDITORIA,'NAO AUDITADO',NULL,1)) CONT_PROC_02,
                    NULL VL_CONS,
                    NULL VL_AUT_CONS,
                    NULL CONT_CONS_01,
                    NULL CONT_CONS_02
                    FROM GUIA_DADO H
                    JOIN GUIA_PROCEDIMENTO A ON ( H.IDGUIADADO = A.IDGUIADADO )
                    JOIN PRESTADOR_CONTRATO G ON ( A.IDCONTRATO = G.ID )
                    JOIN PRESTADOR_DETAIL P ON (P.IDDETAIL = G.IDPRESTADORDETAIL)
                    JOIN PRESTADOR_DADO D ON ( P.IDPRESTADOR = D.IDPRESTADOR )
                    WHERE A.STATUS IN ( 'LIBERADO' , ''
                    AND A.STATUSAUDITORIA = R('NAO AUDITADO')
                    AND H.DATAEMISSAO
                    BETWEEN TO_DATE('01/09/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy')
                    AND LAST_DAY(TO_DATE('01/09/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy'))
                    GROUP BY A.FLAG, P.CNPJ, D.FANTASIA

                    #96496
                    luan
                    Participante

                      Fala mestre Burga, desculpe a demora para responder.
                      Então a função R é apenas para tirar acentuações, eu tentei sem ela e continuou o problema, fiz diversas alterações naquela query também mas não consegui solucionar..
                      As querys quando rodadas individualmente o resultado dos counts e sum vem errado também.
                      Eu fiz os ddls das tabelas resumidas, se puder e tiver algum tempinho agradeço muito a ajuda…
                      Segue abaixo muito obrigado.


                      DROP TABLE GUIA_DADO;
                      DROP TABLE GUIA_PROCEDIMENTO;
                      DROP TABLE GUIA_CONSULTA;
                      DROP TABLE PRESTADOR_DETAIL;

                      CREATE TABLE "PRESTADOR_DETAIL"
                      ( "IDDETAIL" NUMBER CONSTRAINT "NM_PRESTADORDETAIL_00" NOT NULL ENABLE,
                      "CNPJ" VARCHAR2(15 BYTE) CONSTRAINT "NM_PRESTADORDETAIL_02" NOT NULL ENABLE,
                      "FANTASIA" VARCHAR2(170 BYTE) CONSTRAINT "NM_PRESTADORDETAIL_03" NOT NULL ENABLE,
                      CONSTRAINT "NM_PRESTADORDETAIL_22" PRIMARY KEY ("IDDETAIL")
                      )

                      CREATE TABLE "GUIA_DADO"
                      ( "IDGUIADADO" NUMBER CONSTRAINT "NM_GUIADADO_00" NOT NULL ENABLE,
                      "TIPOGUIA" VARCHAR2(20 BYTE) CONSTRAINT "NM_GUIADADO_04" NOT NULL ENABLE,
                      "FLAG" VARCHAR2(12 BYTE) DEFAULT 'NAO AUDITADO' CONSTRAINT "NM_GUIADADO_06" NOT NULL ENABLE,
                      "DATAEMISSAO" DATE DEFAULT SYSDATE CONSTRAINT "NM_GUIADADO_16" NOT NULL ENABLE,
                      CONSTRAINT "NM_GUIADADO_10" CHECK (flag in ('AUDITADO', 'NAO AUDITADO')) ENABLE,
                      CONSTRAINT "NM_GUIADADO_09" PRIMARY KEY ("IDGUIADADO")
                      )

                      CREATE TABLE "GUIA_PROCEDIMENTO"
                      ( "IDPROCEDIMENTO" NUMBER CONSTRAINT "NM_PROCEDIMENTO_00" NOT NULL ENABLE,
                      "IDGUIADADO" NUMBER CONSTRAINT "NM_PROCEDIMENTO_01" NOT NULL ENABLE,
                      "VALOR" NUMBER(15,2) CONSTRAINT "NM_PROCEDIMENTO_11" NOT NULL ENABLE,
                      "STATUS" VARCHAR2(12 BYTE) CONSTRAINT "NM_PROCEDIMENTO_12" NOT NULL ENABLE,
                      "STATUSAUDITORIA" VARCHAR2(20 BYTE) DEFAULT 'NAO AUDITADO' NOT NULL ENABLE,
                      "VALORAUTORIZADOPGTO" NUMBER(15,2),
                      "IDPRESTADORDETAIL" NUMBER,
                      CONSTRAINT "NM_PROCEDIMENTO_20" CHECK (status in ('LIBERADO', 'RECUSADO', 'RETORNO', 'PARA ANALISE', 'PREVIA AUTORIZACAO','CANCELADO')) ENABLE,
                      CONSTRAINT "NM_PROCEDIMENTO_16" PRIMARY KEY ("IDGUIADADO", "IDPROCEDIMENTO")
                      )

                      CREATE TABLE "GUIA_CONSULTA"
                      ( "IDCONSULTA" NUMBER CONSTRAINT "NM_GUIACONSULTA_00" NOT NULL ENABLE,
                      "IDGUIADADO" NUMBER CONSTRAINT "NM_GUIACONSULTA_01" NOT NULL ENABLE,
                      "VALOR" NUMBER(15,2) CONSTRAINT "NM_GUISCONSULTA_07" NOT NULL ENABLE,
                      "STATUS" VARCHAR2(18 BYTE) CONSTRAINT "NM_GUIACONSULTA_08" NOT NULL ENABLE,
                      "FLAG" VARCHAR2(10 BYTE) DEFAULT 'EM ABERTO' CONSTRAINT "NM_GUIACONSULTA_09" NOT NULL ENABLE,
                      "STATUSAUDITORIA" VARCHAR2(20 BYTE) DEFAULT 'NAO AUDITADO' NOT NULL ENABLE,
                      "VALORAUTORIZADOPGTO" NUMBER(15,2),
                      "IDPRESTADORDETAIL" NUMBER,
                      CONSTRAINT "NM_GUIACONSULTA_17" CHECK (status in ('LIBERADO', 'RECUSADO', 'RETORNO', 'EM ANALISE', 'PREVIA AUTORIZACAO','CANCELADO')) ENABLE,
                      CONSTRAINT "NM_GUIACONSULTA_18" CHECK (flag in ('EM ABERTO', 'CANCELADO', 'FINALIZADO')) ENABLE,
                      CONSTRAINT "NM_GUIACONSULTA_13" PRIMARY KEY ("IDCONSULTA")
                      )

                      INSERT INTO PRESTADOR_DETAIL VALUES(1,'11111111111111','CONSULTORIO 1');
                      INSERT INTO PRESTADOR_DETAIL VALUES(2,'22222222222222','LABORATORIO 1');
                      INSERT INTO GUIA_DADO VALUES(12280, 'CONSULTA', 'NAO AUDITADO', SYSDATE-5);
                      INSERT INTO GUIA_DADO VALUES(12281, 'CONSULTA', 'NAO AUDITADO',SYSDATE-6);
                      INSERT INTO GUIA_DADO VALUES(12282, 'CONSULTA', 'NAO AUDITADO',SYSDATE-7);
                      INSERT INTO GUIA_DADO VALUES(12283, 'CONSULTA', 'NAO AUDITADO',SYSDATE-8);
                      INSERT INTO GUIA_DADO VALUES(12284, 'CONSULTA', 'NAO AUDITADO',SYSDATE-9);
                      INSERT INTO GUIA_DADO VALUES(12285, 'CONSULTA', 'NAO AUDITADO',SYSDATE-1);
                      INSERT INTO GUIA_DADO VALUES(12286, 'CONSULTA', 'NAO AUDITADO',SYSDATE-2);
                      INSERT INTO GUIA_DADO VALUES(12287, 'CONSULTA', 'NAO AUDITADO',SYSDATE-3);
                      INSERT INTO GUIA_DADO VALUES(12288, 'CONSULTA', 'NAO AUDITADO',SYSDATE-4);
                      INSERT INTO GUIA_DADO VALUES(12289, 'CONSULTA', 'NAO AUDITADO',SYSDATE-5);
                      INSERT INTO GUIA_DADO VALUES(12290, 'CONSULTA', 'NAO AUDITADO',SYSDATE-6);
                      INSERT INTO GUIA_CONSULTA VALUES(1,12280,123.0,'LIBERADO','FINALIZADO','NAO AUDITADO',123.0,1);
                      INSERT INTO GUIA_CONSULTA VALUES(2,12281,180.0,'LIBERADO','FINALIZADO','NAO AUDITADO',180.0,1);
                      INSERT INTO GUIA_CONSULTA VALUES(3,12282,80.0,'LIBERADO','FINALIZADO','NAO AUDITADO',80.0,1);
                      INSERT INTO GUIA_CONSULTA VALUES (4,12283,40.0,'LIBERADO','FINALIZADO','NAO AUDITADO',40.0,1);
                      INSERT INTO GUIA_CONSULTA VALUES (5,12284,80.0,'LIBERADO','FINALIZADO','AUTORIZADO',80.0,1);
                      INSERT INTO GUIA_CONSULTA VALUES(6,12285,70.0,'LIBERADO','FINALIZADO','AUTORIZADO',80.0,1);
                      INSERT INTO GUIA_PROCEDIMENTO VALUES(1,12286,60.0,'LIBERADO','NAO AUDITADO',60.0,2);
                      INSERT INTO GUIA_PROCEDIMENTO VALUES(2,12287,90.0,'LIBERADO','NAO AUDITADO',90.0,2);
                      INSERT INTO GUIA_PROCEDIMENTO VALUES(3,12288,50.0,'LIBERADO','NAO AUDITADO',50.0,2);
                      INSERT INTO GUIA_PROCEDIMENTO VALUES(4,12289,90.0,'LIBERADO','AUTORIZADO',90.0,2);
                      INSERT INTO GUIA_PROCEDIMENTO VALUES(5,12290,190.0,'LIBERADO','AUTORIZADO',190.0,2);

                      E a query abaixo:

                      SELECT CNPJ,FANTASIA, SUM(VL_PROC), SUM(VL_AUT_PROC), SUM(CONT_PROC_01), SUM(CONT_PROC_02), SUM(VL_CONS), SUM(VL_AUT_CONS), SUM(CONT_CONS_01), SUM(CONT_CONS_02) FROM (
                      SELECT P.CNPJ, P.FANTASIA, SUM(A.VALOR) VL_PROC, SUM(A.VALORAUTORIZADOPGTO) VL_AUT_PROC, COUNT() CONT_PROC_01, COUNT(DECODE(A.STATUSAUDITORIA,'NAO AUDITADO',NULL,1)) CONT_PROC_02, NULL VL_CONS, NULL VL_AUT_CONS, NULL CONT_CONS_01, NULL CONT_CONS_02
                      FROM GUIA_DADO H
                      JOIN GUIA_PROCEDIMENTO A ON ( H.IDGUIADADO = A.IDGUIADADO )
                      JOIN PRESTADOR_DETAIL P ON (P.IDDETAIL = A.IDPRESTADORDETAIL)
                      WHERE A.STATUS = 'LIBERADO'
                      AND A.STATUSAUDITORIA = 'NAO AUDITADO'
                      AND H.DATAEMISSAO
                      BETWEEN TO_DATE('01/10/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy')
                      AND LAST_DAY(TO_DATE('01/10/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy'))
                      GROUP BY P.CNPJ, P.FANTASIA, NULL, NULL, NULL, NULL
                      UNION ALL
                      SELECT P.CNPJ, P.FANTASIA, NULL VL_PROC, NULL VL_AUT_PROC, NULL CONT_PROC_01, NULL CONT_PROC_02, SUM(A.VALOR) VL_CONS, SUM(A.VALORAUTORIZADOPGTO) VL_AUT_CONS, COUNT(
                      ) CONT_CONS_01, COUNT(DECODE(A.STATUSAUDITORIA,'NAO AUDITADO',NULL,1)) CONT_CONS_02
                      FROM GUIA_DADO H
                      JOIN GUIA_CONSULTA A ON ( H.IDGUIADADO = A.IDGUIADADO )
                      JOIN PRESTADOR_DETAIL P ON (P.IDDETAIL = A.IDPRESTADORDETAIL)
                      WHERE A.STATUS = 'LIBERADO' AND A.FLAG = 'FINALIZADO'
                      AND A.STATUSAUDITORIA = 'NAO AUDITADO'
                      AND H.DATAEMISSAO
                      BETWEEN TO_DATE('01/10/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy')
                      AND LAST_DAY(TO_DATE('01/10/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy'))
                      GROUP BY P.CNPJ, P.FANTASIA
                      ) GROUP BY CNPJ, FANTASIA ;

                      Abs

                      #96497
                      burga
                      Participante

                        Boa luan, agora eu acho que entendi, veja se isto funciona:

                        SELECT CNPJ,FANTASIA, SUM(VL_PROC), SUM(VL_AUT_PROC), SUM(CONT_PROC_01), SUM(CONT_PROC_02), SUM(VL_CONS), SUM(VL_AUT_CONS), SUM(CONT_CONS_01), SUM(CONT_CONS_02) FROM (
                        SELECT P.CNPJ, P.FANTASIA, SUM(A.VALOR) VL_PROC, SUM(A.VALORAUTORIZADOPGTO) VL_AUT_PROC, COUNT() CONT_PROC_01, COUNT(DECODE(A.STATUSAUDITORIA,'NAO AUDITADO',NULL,1)) CONT_PROC_02, NULL VL_CONS, NULL VL_AUT_CONS, NULL CONT_CONS_01, NULL CONT_CONS_02
                        FROM GUIA_DADO H
                        JOIN GUIA_PROCEDIMENTO A ON ( H.IDGUIADADO = A.IDGUIADADO )
                        JOIN PRESTADOR_DETAIL P ON (P.IDDETAIL = A.IDPRESTADORDETAIL)
                        WHERE A.STATUS = 'LIBERADO'
                        AND H.DATAEMISSAO
                        BETWEEN TO_DATE('01/10/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy')
                        AND LAST_DAY(TO_DATE('01/10/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy'))
                        GROUP BY P.CNPJ, P.FANTASIA, NULL, NULL, NULL, NULL
                        UNION ALL
                        SELECT P.CNPJ, P.FANTASIA, NULL VL_PROC, NULL VL_AUT_PROC, NULL CONT_PROC_01, NULL CONT_PROC_02, SUM(A.VALOR) VL_CONS, SUM(A.VALORAUTORIZADOPGTO) VL_AUT_CONS, COUNT(
                        ) CONT_CONS_01, COUNT(DECODE(A.STATUSAUDITORIA,'NAO AUDITADO',NULL,1)) CONT_CONS_02
                        FROM GUIA_DADO H
                        JOIN GUIA_CONSULTA A ON ( H.IDGUIADADO = A.IDGUIADADO )
                        JOIN PRESTADOR_DETAIL P ON (P.IDDETAIL = A.IDPRESTADORDETAIL)
                        WHERE A.STATUS = 'LIBERADO' AND A.FLAG = 'FINALIZADO'
                        AND H.DATAEMISSAO
                        BETWEEN TO_DATE('01/10/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy')
                        AND LAST_DAY(TO_DATE('01/10/' || TO_CHAR(H.DATAEMISSAO,'yyyy'),'dd/mm/yyyy'))
                        GROUP BY P.CNPJ, P.FANTASIA
                        ) GROUP BY CNPJ, FANTASIA
                        HAVING SUM(CONT_PROC_01) != SUM(CONT_PROC_02) OR SUM(CONT_CONS_01) != SUM(CONT_CONS_02);

                        Só removi a condição A.STATUSAUDITORIA = ‘NAO AUDITADO’ e acrescentei a cláusula HAVING no final.

                        A cláusula HAVING eu coloquei pois, pelos scripts anteriores, você quer buscar somente os resultados de CNPJ’s que possuam alguma consulta ou procedimento com status = ‘NAO AUDITADO’, estou certo?
                        Se não estiver correto é só tirar a cláusula HAVING que a query buscará por todas as consultas e procedimentos, sem restrições…

                        #96499
                        luan
                        Participante

                          Grandeeeee Burga, o grande gênio do sql!!!
                          Funcionou perfeitamente !!!

                          Muitíssimo obrigado !!!

                          Abs

                          #96500
                          burga
                          Participante

                            Oi luan,

                            Que bom que era isso mesmo que você estava querendo.

                            Obrigado pela consideração mas acho que chamar de gênio e mestre já é demais. 😆

                            Pode chamar só de burga mesmo que eu me sinto mais confortável! Gênio e mestre eu deixo pra outros por aí que considero bem melhores do que eu. 😉

                          Visualizando 12 posts - 1 até 12 (de 12 do total)
                          • Você deve fazer login para responder a este tópico.