Re: [oracle_br] dúvida com union

2005-07-11 Por tôpico dbaoracle (candangoNET)
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

2005-07-09 Por tôpico Marcio R Portes
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

2005-07-08 Por tôpico Kátia Claro
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

2005-07-08 Por tôpico Alex Fernando Kirsten
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 =