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', 'MMYYYY'), TO_DATE('062005', 'MMYYYY')) 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, 'MMYYYY') = '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, 'MMYYYY') = '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', 'MMYYYY'), TO_DATE('062005', 'MMYYYY')) 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
>
>O resultado no meu campo orçado muda para:
>
>0
>38541
>331513,5
>61465,5
>327460
>
>Olha já estou ficando doidinha com este select, mas não consegui descobrir o 
>que pode ser, alguém tem alguma luz?
>
>obrigada
>
>Kátia Claro 
>
>
>[As partes desta mensagem que não continham texto foram removidas]
>
>
>
>______________________________________________________________________
>
>Cancelar assinatura...: [EMAIL PROTECTED]
>Moderadores da lista....:Dorian Anderson Soutto [EMAIL PROTECTED] 
>Fernanda Damous [EMAIL PROTECTED] 
>Alisson Aguiar [EMAIL PROTECTED]
>______________________________________________________________________
>http://br.groups.yahoo.com/group/oracle_br/ 
>______________________________________________________________________
>
>Sair da Lista...: [EMAIL PROTECTED] 
>Links do Yahoo! Grupos
>
>
>
>
> 
>
>
>
>
>  
>



______________________________________________________________________

Cancelar assinatura...: [EMAIL PROTECTED]
Moderadores da lista....:Dorian Anderson Soutto [EMAIL PROTECTED] 
Fernanda Damous [EMAIL PROTECTED] 
Alisson Aguiar [EMAIL PROTECTED]
______________________________________________________________________
http://br.groups.yahoo.com/group/oracle_br/ 
______________________________________________________________________

Sair da Lista...: [EMAIL PROTECTED] 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a