- Este tópico contém 11 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 4 meses atrás por
burga.
-
AutorPosts
-
13 de outubro de 2010 às 10:35 pm #96439
luan
ParticipanteOlá 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
13 de outubro de 2010 às 11:18 pm #96442burga
ParticipanteOi 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…
13 de outubro de 2010 às 11:28 pm #96443luan
ParticipanteFala 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
14 de outubro de 2010 às 12:31 am #96446burga
ParticipanteSe 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.
14 de outubro de 2010 às 4:15 pm #96448luan
ParticipanteValeu Burga, vou adaptar, a princípio a parte dos count e sum retornaram errado, mas os registros vieram todos..
Valeuu Abraços
14 de outubro de 2010 às 5:46 pm #96452luan
ParticipanteNão consegui achar o problema do porque os sum e count estão retornando 0, tem alguma ideia Burga?
Valeuuuu
14 de outubro de 2010 às 6:50 pm #96454burga
ParticipanteOi 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!!!
15 de outubro de 2010 às 11:52 pm #96476Anô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.FANTASIA20 de outubro de 2010 às 8:55 pm #96496luan
ParticipanteFala 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
20 de outubro de 2010 às 9:40 pm #96497burga
ParticipanteBoa 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…20 de outubro de 2010 às 11:25 pm #96499luan
ParticipanteGrandeeeee Burga, o grande gênio do sql!!!
Funcionou perfeitamente !!!Muitíssimo obrigado !!!
Abs
21 de outubro de 2010 às 12:07 am #96500burga
ParticipanteOi 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. 😉
-
AutorPosts
- Você deve fazer login para responder a este tópico.