Re: [oracle_br] dúvida com union
Kátia, Não entendi direito o que você está considerando resultado errado, mas posso dizer que o UNION retornar linhas distintas das duas querys, como se fizesse um distinct de todos os campos. Por exemplo, se rodar a seguinte query só retornará um valor: SELECT 'TESTE' FROM DUAL UNION SELECT 'TESTE' FROM DUAL; Retornará apenas um registro 'TESTE' se quiser os dois terá que usar UNION ALL. Espero que ter ajudado. Abs, Murilo Kátia Claro escreveu: Pessoal, quando eu rodo este select: SELECT SELC.CAMPO_1, SELC.CAMPO_2, SUM(NVL(SELC.FATURAMENTO, 0)) FATURAMENTO, SUM(SELC.ORCADO) ORCADO, NVL(F_VAR_ATUAL(SUM(NVL(SELC.FATURAMENTO, 0)), SUM(SELC.ORCADO)),0) VAR_ATUAL, SUM(NVL(SELC.ANO_ANTERIOR, 0)) ANO_ANTERIOR, NVL(F_VAR_ATUAL(SUM(SELC.FATURAMENTO), SUM(NVL(SELC.ANO_ANTERIOR, 0))),0) VAR_ANTERIOR FROM ( SELECT U.UNI_NOME CAMPO_1, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, TO_DATE('062005', 'MM'), TO_DATE('062005', 'MM')) CAMPO_2, U.UNI_CODIGO CAMPO_3, NULL CAMPO_4, NVL(F_VALORCADO('062005', '062005', U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO, 'U.UNI_CODIGO', 'G.GNP_CODIGO', 'CP.CTP_CODIGO'), 0) ORCADO, TO_NUMBER(NULL) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM CONTRATO C, UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G, CONTRATO_CATPROD CCP, CAT_PRODUTO CP , ORC_RECEITACAT ORC, ORC_RECEITAGEN ORG WHERE U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND PG.PRG_CODIGO = P.PRG_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND ORG.UNI_CODIGO = C.UNI_CODIGO AND ORG.GNP_CODIGO = G.GNP_CODIGO AND ORC.UNI_CODIGO = C.UNI_CODIGO AND ORG.ORG_ANO = '2005' AND ORC.ORC_ANO = '2005' AND (( ORC.ORC_JUN 0) AND ( ORG.ORG_JUN 0)) AND ((ORC.CTP_CODIGO = CCP.CTP_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO) OR (CP.CTP_CODIGO = ORC.CTP_CODIGO AND ( ORC.ORC_JUN 0 AND ORG.ORG_JUN 0))) GROUP BY U.UNI_NOME, NULL, U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO ) SELC GROUP BY SELC.CAMPO_1, SELC.CAMPO_2, SELC.CAMPO_3, SELC.CAMPO_4 ORDER BY SELC.CAMPO_1, SELC.CAMPO_2, SELC.CAMPO_3, SELC.CAMPO_4 Tenho o seguinte resultado para o campo orçado: 42021 331513,5 61465,5 327460 estes resultados estão certos, mas quando eu coloco mais dois selects usando o UNION SELECT SELC.CAMPO_1, SELC.CAMPO_2, SUM(NVL(SELC.FATURAMENTO, 0)) FATURAMENTO, SUM(SELC.ORCADO) ORCADO, NVL(F_VAR_ATUAL(SUM(NVL(SELC.FATURAMENTO, 0)), SUM(SELC.ORCADO)),0) VAR_ATUAL, SUM(NVL(SELC.ANO_ANTERIOR, 0)) ANO_ANTERIOR, NVL(F_VAR_ATUAL(SUM(SELC.FATURAMENTO), SUM(NVL(SELC.ANO_ANTERIOR, 0))),0) VAR_ANTERIOR FROM ( SELECT U.UNI_NOME CAMPO_1, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC) CAMPO_2, U.UNI_CODIGO CAMPO_3, NULL CAMPO_4, 0 ORCADO, SUM(H.HTP_VLFATURADO) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM HIS_PAGAMENTO H, CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G , CAT_PRODUTO CP, CONTRATO_CATPROD CCP WHERE C.CTR_CODIGO = H.CTR_CODIGO AND U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND P.PRG_CODIGO = PG.PRG_CODIGO AND PG.GNP_CODIGO = G.GNP_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO AND TO_CHAR(H.HTP_DTVENC, 'MM') = '062005' AND H.HTP_FATURADO = 'S' GROUP BY U.UNI_NOME, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC), U.UNI_CODIGO, NULL UNION SELECT U.UNI_NOME CAMPO_1,F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC) CAMPO_2,U.UNI_CODIGO CAMPO_3,NULL CAMPO_4,0 ORCADO, TO_NUMBER(NULL) FATURAMENTO, SUM(H.HTP_VLFATURADO) ANO_ANTERIO FROM HIS_PAGAMENTO H, CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G , CONTRATO_CATPROD CCP, CAT_PRODUTO CP WHERE C.CTR_CODIGO = H.CTR_CODIGO AND U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND P.PRG_CODIGO = PG.PRG_CODIGO AND PG.GNP_CODIGO = G.GNP_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO AND TO_CHAR(H.HTP_DTVENC, 'MM') = '062004' AND H.HTP_FATURADO = 'S' GROUP BY U.UNI_NOME, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC), U.UNI_CODIGO, NULL UNION SELECT U.UNI_NOME CAMPO_1,F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, TO_DATE('062005', 'MM'), TO_DATE('062005', 'MM')) CAMPO_2, U.UNI_CODIGO CAMPO_3,NULL CAMPO_4,NVL(F_VALORCADO('062005', '062005', U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO, 'U.UNI_CODIGO', 'G.GNP_CODIGO', 'CP.CTP_CODIGO'), 0) ORCADO,TO_NUMBER(NULL) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P,PROGRAMA PG, GEN_PROGRAMA G, CONTRATO_CATPROD CCP, CAT_PRODUTO CP , ORC_RECEITACAT ORC, ORC_RECEITAGEN ORG WHERE U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND PG.PRG_CODIGO = P.PRG_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO
Re: [oracle_br] dúvida com union
Katia, Tente union all ao inves do union. O union faz distinct implicito. -- Marcio Portes http://mportes.blogspot.com Kátia Claro wrote: Pessoal, quando eu rodo este select: SELECT SELC.CAMPO_1, SELC.CAMPO_2, SUM(NVL(SELC.FATURAMENTO, 0)) FATURAMENTO, SUM(SELC.ORCADO) ORCADO, NVL(F_VAR_ATUAL(SUM(NVL(SELC.FATURAMENTO, 0)), SUM(SELC.ORCADO)),0) VAR_ATUAL, SUM(NVL(SELC.ANO_ANTERIOR, 0)) ANO_ANTERIOR, NVL(F_VAR_ATUAL(SUM(SELC.FATURAMENTO), SUM(NVL(SELC.ANO_ANTERIOR, 0))),0) VAR_ANTERIOR FROM ( SELECT U.UNI_NOME CAMPO_1, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, TO_DATE('062005', 'MM'), TO_DATE('062005', 'MM')) CAMPO_2, U.UNI_CODIGO CAMPO_3, NULL CAMPO_4, NVL(F_VALORCADO('062005', '062005', U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO, 'U.UNI_CODIGO', 'G.GNP_CODIGO', 'CP.CTP_CODIGO'), 0) ORCADO, TO_NUMBER(NULL) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM CONTRATO C, UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G, CONTRATO_CATPROD CCP, CAT_PRODUTO CP , ORC_RECEITACAT ORC, ORC_RECEITAGEN ORG WHERE U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND PG.PRG_CODIGO = P.PRG_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND ORG.UNI_CODIGO = C.UNI_CODIGO AND ORG.GNP_CODIGO = G.GNP_CODIGO AND ORC.UNI_CODIGO = C.UNI_CODIGO AND ORG.ORG_ANO = '2005' AND ORC.ORC_ANO = '2005' AND (( ORC.ORC_JUN 0) AND ( ORG.ORG_JUN 0)) AND ((ORC.CTP_CODIGO = CCP.CTP_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO) OR (CP.CTP_CODIGO = ORC.CTP_CODIGO AND ( ORC.ORC_JUN 0 AND ORG.ORG_JUN 0))) GROUP BY U.UNI_NOME, NULL, U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO ) SELC GROUP BY SELC.CAMPO_1, SELC.CAMPO_2, SELC.CAMPO_3, SELC.CAMPO_4 ORDER BY SELC.CAMPO_1, SELC.CAMPO_2, SELC.CAMPO_3, SELC.CAMPO_4 Tenho o seguinte resultado para o campo orçado: 42021 331513,5 61465,5 327460 estes resultados estão certos, mas quando eu coloco mais dois selects usando o UNION SELECT SELC.CAMPO_1, SELC.CAMPO_2, SUM(NVL(SELC.FATURAMENTO, 0)) FATURAMENTO, SUM(SELC.ORCADO) ORCADO, NVL(F_VAR_ATUAL(SUM(NVL(SELC.FATURAMENTO, 0)), SUM(SELC.ORCADO)),0) VAR_ATUAL, SUM(NVL(SELC.ANO_ANTERIOR, 0)) ANO_ANTERIOR, NVL(F_VAR_ATUAL(SUM(SELC.FATURAMENTO), SUM(NVL(SELC.ANO_ANTERIOR, 0))),0) VAR_ANTERIOR FROM ( SELECT U.UNI_NOME CAMPO_1, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC) CAMPO_2, U.UNI_CODIGO CAMPO_3, NULL CAMPO_4, 0 ORCADO, SUM(H.HTP_VLFATURADO) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM HIS_PAGAMENTO H, CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G , CAT_PRODUTO CP, CONTRATO_CATPROD CCP WHERE C.CTR_CODIGO = H.CTR_CODIGO AND U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND P.PRG_CODIGO = PG.PRG_CODIGO AND PG.GNP_CODIGO = G.GNP_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO AND TO_CHAR(H.HTP_DTVENC, 'MM') = '062005' AND H.HTP_FATURADO = 'S' GROUP BY U.UNI_NOME, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC), U.UNI_CODIGO, NULL UNION SELECT U.UNI_NOME CAMPO_1,F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC) CAMPO_2,U.UNI_CODIGO CAMPO_3,NULL CAMPO_4,0 ORCADO, TO_NUMBER(NULL) FATURAMENTO, SUM(H.HTP_VLFATURADO) ANO_ANTERIO FROM HIS_PAGAMENTO H, CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G , CONTRATO_CATPROD CCP, CAT_PRODUTO CP WHERE C.CTR_CODIGO = H.CTR_CODIGO AND U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND P.PRG_CODIGO = PG.PRG_CODIGO AND PG.GNP_CODIGO = G.GNP_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO AND TO_CHAR(H.HTP_DTVENC, 'MM') = '062004' AND H.HTP_FATURADO = 'S' GROUP BY U.UNI_NOME, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC), U.UNI_CODIGO, NULL UNION SELECT U.UNI_NOME CAMPO_1,F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, TO_DATE('062005', 'MM'), TO_DATE('062005', 'MM')) CAMPO_2, U.UNI_CODIGO CAMPO_3,NULL CAMPO_4,NVL(F_VALORCADO('062005', '062005', U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO, 'U.UNI_CODIGO', 'G.GNP_CODIGO', 'CP.CTP_CODIGO'), 0) ORCADO,TO_NUMBER(NULL) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P,PROGRAMA PG, GEN_PROGRAMA G, CONTRATO_CATPROD CCP, CAT_PRODUTO CP , ORC_RECEITACAT ORC, ORC_RECEITAGEN ORG WHERE U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND PG.PRG_CODIGO = P.PRG_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND ORG.UNI_CODIGO = C.UNI_CODIGO AND ORG.GNP_CODIGO = G.GNP_CODIGO AND ORC.UNI_CODIGO = C.UNI_CODIGO AND ORG.ORG_ANO = '2005' AND ORC.ORC_ANO = '2005' AND (( ORC.ORC_JUN 0) AND ( ORG.ORG_JUN 0)) AND ((ORC.CTP_CODIGO =
[oracle_br] dúvida com union
Pessoal, quando eu rodo este select: SELECT SELC.CAMPO_1, SELC.CAMPO_2, SUM(NVL(SELC.FATURAMENTO, 0)) FATURAMENTO, SUM(SELC.ORCADO) ORCADO, NVL(F_VAR_ATUAL(SUM(NVL(SELC.FATURAMENTO, 0)), SUM(SELC.ORCADO)),0) VAR_ATUAL, SUM(NVL(SELC.ANO_ANTERIOR, 0)) ANO_ANTERIOR, NVL(F_VAR_ATUAL(SUM(SELC.FATURAMENTO), SUM(NVL(SELC.ANO_ANTERIOR, 0))),0) VAR_ANTERIOR FROM ( SELECT U.UNI_NOME CAMPO_1, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, TO_DATE('062005', 'MM'), TO_DATE('062005', 'MM')) CAMPO_2, U.UNI_CODIGO CAMPO_3, NULL CAMPO_4, NVL(F_VALORCADO('062005', '062005', U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO, 'U.UNI_CODIGO', 'G.GNP_CODIGO', 'CP.CTP_CODIGO'), 0) ORCADO, TO_NUMBER(NULL) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM CONTRATO C, UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G, CONTRATO_CATPROD CCP, CAT_PRODUTO CP , ORC_RECEITACAT ORC, ORC_RECEITAGEN ORG WHERE U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND PG.PRG_CODIGO = P.PRG_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND ORG.UNI_CODIGO = C.UNI_CODIGO AND ORG.GNP_CODIGO = G.GNP_CODIGO AND ORC.UNI_CODIGO = C.UNI_CODIGO AND ORG.ORG_ANO = '2005' AND ORC.ORC_ANO = '2005' AND (( ORC.ORC_JUN 0) AND ( ORG.ORG_JUN 0)) AND ((ORC.CTP_CODIGO = CCP.CTP_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO) OR (CP.CTP_CODIGO = ORC.CTP_CODIGO AND ( ORC.ORC_JUN 0 AND ORG.ORG_JUN 0))) GROUP BY U.UNI_NOME, NULL, U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO ) SELC GROUP BY SELC.CAMPO_1, SELC.CAMPO_2, SELC.CAMPO_3, SELC.CAMPO_4 ORDER BY SELC.CAMPO_1, SELC.CAMPO_2, SELC.CAMPO_3, SELC.CAMPO_4 Tenho o seguinte resultado para o campo orçado: 42021 331513,5 61465,5 327460 estes resultados estão certos, mas quando eu coloco mais dois selects usando o UNION SELECT SELC.CAMPO_1, SELC.CAMPO_2, SUM(NVL(SELC.FATURAMENTO, 0)) FATURAMENTO, SUM(SELC.ORCADO) ORCADO, NVL(F_VAR_ATUAL(SUM(NVL(SELC.FATURAMENTO, 0)), SUM(SELC.ORCADO)),0) VAR_ATUAL, SUM(NVL(SELC.ANO_ANTERIOR, 0)) ANO_ANTERIOR, NVL(F_VAR_ATUAL(SUM(SELC.FATURAMENTO), SUM(NVL(SELC.ANO_ANTERIOR, 0))),0) VAR_ANTERIOR FROM ( SELECT U.UNI_NOME CAMPO_1, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC) CAMPO_2, U.UNI_CODIGO CAMPO_3, NULL CAMPO_4, 0 ORCADO, SUM(H.HTP_VLFATURADO) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM HIS_PAGAMENTO H, CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G , CAT_PRODUTO CP, CONTRATO_CATPROD CCP WHERE C.CTR_CODIGO = H.CTR_CODIGO AND U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND P.PRG_CODIGO = PG.PRG_CODIGO AND PG.GNP_CODIGO = G.GNP_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO AND TO_CHAR(H.HTP_DTVENC, 'MM') = '062005' AND H.HTP_FATURADO = 'S' GROUP BY U.UNI_NOME, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC), U.UNI_CODIGO, NULL UNION SELECT U.UNI_NOME CAMPO_1,F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC) CAMPO_2,U.UNI_CODIGO CAMPO_3,NULL CAMPO_4, 0 ORCADO, TO_NUMBER(NULL) FATURAMENTO,SUM(H.HTP_VLFATURADO) ANO_ANTERIO FROM HIS_PAGAMENTO H, CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G , CONTRATO_CATPROD CCP, CAT_PRODUTO CP WHERE C.CTR_CODIGO = H.CTR_CODIGO AND U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND P.PRG_CODIGO = PG.PRG_CODIGO AND PG.GNP_CODIGO = G.GNP_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO AND TO_CHAR(H.HTP_DTVENC, 'MM') = '062004' AND H.HTP_FATURADO = 'S' GROUP BY U.UNI_NOME, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC), U.UNI_CODIGO, NULL UNION SELECT U.UNI_NOME CAMPO_1,F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, TO_DATE('062005', 'MM'), TO_DATE('062005', 'MM')) CAMPO_2, U.UNI_CODIGO CAMPO_3,NULL CAMPO_4,NVL(F_VALORCADO('062005', '062005', U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO, 'U.UNI_CODIGO', 'G.GNP_CODIGO', 'CP.CTP_CODIGO'), 0) ORCADO,TO_NUMBER(NULL) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P,PROGRAMA PG, GEN_PROGRAMA G, CONTRATO_CATPROD CCP, CAT_PRODUTO CP , ORC_RECEITACAT ORC, ORC_RECEITAGEN ORG WHERE U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND PG.PRG_CODIGO = P.PRG_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND ORG.UNI_CODIGO = C.UNI_CODIGO AND ORG.GNP_CODIGO = G.GNP_CODIGO AND ORC.UNI_CODIGO = C.UNI_CODIGO AND ORG.ORG_ANO = '2005' AND ORC.ORC_ANO = '2005' AND (( ORC.ORC_JUN 0) AND ( ORG.ORG_JUN 0)) AND ((ORC.CTP_CODIGO = CCP.CTP_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO) OR (CP.CTP_CODIGO = ORC.CTP_CODIGO AND ( ORC.ORC_JUN 0 AND ORG.ORG_JUN 0))) GROUP BY U.UNI_NOME, NULL, U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO ) SELC GROUP BY SELC.CAMPO_1,
Re: [oracle_br] dúvida com union
bom... que resultado vc obtém se rodar um select por vez? Não seriam os mesmos? Copia o resultado que cada select separado retorna. []'s -- Alex Fernando Kirsten MSN: [EMAIL PROTECTED] Oracle DBA (in curse) On 7/8/05, Kátia Claro [EMAIL PROTECTED] wrote: Pessoal, quando eu rodo este select: SELECT SELC.CAMPO_1, SELC.CAMPO_2, SUM(NVL(SELC.FATURAMENTO, 0)) FATURAMENTO, SUM(SELC.ORCADO) ORCADO, NVL(F_VAR_ATUAL(SUM(NVL(SELC.FATURAMENTO, 0)), SUM(SELC.ORCADO)),0) VAR_ATUAL, SUM(NVL(SELC.ANO_ANTERIOR, 0)) ANO_ANTERIOR, NVL(F_VAR_ATUAL(SUM(SELC.FATURAMENTO), SUM(NVL(SELC.ANO_ANTERIOR, 0))),0) VAR_ANTERIOR FROM ( SELECT U.UNI_NOME CAMPO_1, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, TO_DATE('062005', 'MM'), TO_DATE('062005', 'MM')) CAMPO_2, U.UNI_CODIGO CAMPO_3, NULL CAMPO_4, NVL(F_VALORCADO('062005', '062005', U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO, 'U.UNI_CODIGO', 'G.GNP_CODIGO', 'CP.CTP_CODIGO'), 0) ORCADO, TO_NUMBER(NULL) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM CONTRATO C, UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G, CONTRATO_CATPROD CCP, CAT_PRODUTO CP , ORC_RECEITACAT ORC, ORC_RECEITAGEN ORG WHERE U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND PG.PRG_CODIGO = P.PRG_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND ORG.UNI_CODIGO = C.UNI_CODIGO AND ORG.GNP_CODIGO = G.GNP_CODIGO AND ORC.UNI_CODIGO = C.UNI_CODIGO AND ORG.ORG_ANO = '2005' AND ORC.ORC_ANO = '2005' AND (( ORC.ORC_JUN 0) AND ( ORG.ORG_JUN 0)) AND ((ORC.CTP_CODIGO = CCP.CTP_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO) OR (CP.CTP_CODIGO = ORC.CTP_CODIGO AND ( ORC.ORC_JUN 0 AND ORG.ORG_JUN 0))) GROUP BY U.UNI_NOME, NULL, U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO ) SELC GROUP BY SELC.CAMPO_1, SELC.CAMPO_2, SELC.CAMPO_3, SELC.CAMPO_4 ORDER BY SELC.CAMPO_1, SELC.CAMPO_2, SELC.CAMPO_3, SELC.CAMPO_4 Tenho o seguinte resultado para o campo orçado: 42021 331513,5 61465,5 327460 estes resultados estão certos, mas quando eu coloco mais dois selects usando o UNION SELECT SELC.CAMPO_1, SELC.CAMPO_2, SUM(NVL(SELC.FATURAMENTO, 0)) FATURAMENTO, SUM(SELC.ORCADO) ORCADO, NVL(F_VAR_ATUAL(SUM(NVL(SELC.FATURAMENTO, 0)), SUM(SELC.ORCADO)),0) VAR_ATUAL, SUM(NVL(SELC.ANO_ANTERIOR, 0)) ANO_ANTERIOR, NVL(F_VAR_ATUAL(SUM(SELC.FATURAMENTO), SUM(NVL(SELC.ANO_ANTERIOR, 0))),0) VAR_ANTERIOR FROM ( SELECT U.UNI_NOME CAMPO_1, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC) CAMPO_2, U.UNI_CODIGO CAMPO_3, NULL CAMPO_4, 0 ORCADO, SUM(H.HTP_VLFATURADO) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM HIS_PAGAMENTO H, CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G , CAT_PRODUTO CP, CONTRATO_CATPROD CCP WHERE C.CTR_CODIGO = H.CTR_CODIGO AND U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND P.PRG_CODIGO = PG.PRG_CODIGO AND PG.GNP_CODIGO = G.GNP_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO AND TO_CHAR(H.HTP_DTVENC, 'MM') = '062005' AND H.HTP_FATURADO = 'S' GROUP BY U.UNI_NOME, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC), U.UNI_CODIGO, NULL UNION SELECT U.UNI_NOME CAMPO_1,F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC) CAMPO_2,U.UNI_CODIGO CAMPO_3,NULL CAMPO_4,0 ORCADO, TO_NUMBER(NULL) FATURAMENTO, SUM(H.HTP_VLFATURADO) ANO_ANTERIO FROM HIS_PAGAMENTO H, CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P, PROGRAMA PG, GEN_PROGRAMA G , CONTRATO_CATPROD CCP, CAT_PRODUTO CP WHERE C.CTR_CODIGO = H.CTR_CODIGO AND U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND P.PRG_CODIGO = PG.PRG_CODIGO AND PG.GNP_CODIGO = G.GNP_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND CP.CTP_CODIGO = CCP.CTP_CODIGO AND TO_CHAR(H.HTP_DTVENC, 'MM') = '062004' AND H.HTP_FATURADO = 'S' GROUP BY U.UNI_NOME, F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, H.HTP_DTVENC, H.HTP_DTVENC), U.UNI_CODIGO, NULL UNION SELECT U.UNI_NOME CAMPO_1,F_CONTATOS_CATEGORIA(CP.CTP_CODIGO, TO_DATE('062005', 'MM'), TO_DATE('062005', 'MM')) CAMPO_2, U.UNI_CODIGO CAMPO_3,NULL CAMPO_4,NVL(F_VALORCADO('062005', '062005', U.UNI_CODIGO, G.GNP_CODIGO, CP.CTP_CODIGO, 'U.UNI_CODIGO', 'G.GNP_CODIGO', 'CP.CTP_CODIGO'), 0) ORCADO,TO_NUMBER(NULL) FATURAMENTO, TO_NUMBER(NULL) ANO_ANTERIOR FROM CONTRATO C,UNI_NEGOCIO U, PROPRIEDADE P,PROGRAMA PG, GEN_PROGRAMA G, CONTRATO_CATPROD CCP, CAT_PRODUTO CP , ORC_RECEITACAT ORC, ORC_RECEITAGEN ORG WHERE U.UNI_CODIGO = C.UNI_CODIGO AND P.PRP_CODIGO = C.PRP_CODIGO AND PG.PRG_CODIGO = P.PRG_CODIGO AND CCP.CTR_CODIGO = C.CTR_CODIGO AND ORG.UNI_CODIGO = C.UNI_CODIGO AND ORG.GNP_CODIGO = G.GNP_CODIGO AND ORC.UNI_CODIGO = C.UNI_CODIGO AND ORG.ORG_ANO = '2005' AND ORC.ORC_ANO =