Colega, a primeira coisa que salta aos olhos é que tem alguma coisa 
estranha aí no seu SQL : no primeiro caso vc pede  to_date(ve.data) , 
e no segundo caso to_char(ve.data,'yyyymm') - ORA, qual é afinal o 
raio do datatype desse ve.data ???? SE FOR date, é ABOBRINHA vc pedir 
TO_DATE de um cara que já é date, E se for string é ABOBRINHA vc 
pedir TO_CHAR de um cara que já é string, qquer dos casos SÓ PODE dar 
lixo, não faz o menor sentido vc converter algo pra alguma coisa que 
ele já é...
 Outra coisa que se pensa (é o caso 99 vezes em cada 100), quando se 
vê consulta que manipula datas não retornando o esperado, é 
desenvolvedor caindo num dos FAQs mais básicos do Oracle, qual seja : 
no bd Oracle, uma coluna do tipo DATE ** necessariamente ** tem além 
da data a HORA nela também, e essa hora PODE ou NÃO estar sendo 
informada na hora de gravar valores na coluna, se não for informada o 
banco assume zero hora (meia-noite) - a suposição aqui é que nas 
colunas do seu WHERE o datatype é DATE, E a hora está sendo gravada E 
vc não informa a hora no seu WHERE, aí há registros (óbvio) que não 
vêm.... Experimente usar no WHERE :
 and campodata BETWEEN to_date('01/12/2006 00:00:00', 'dd/mm/yyyy 
hh24:mi:ss') AND to_date('31/12/2006 23:59:59', 'dd/mm/yyyy 
hh24:mi:ss');
  E última coisa, não deve ser o caso mas vou citar : o SUM (e as 
funções de grupo de modo geral) DESCONSIDERAM valores nulos, o que 
faz sentido já que soma de nulo é nulo, o bd Oracle é rigoroso na 
avaliação lógica tri-state, nulo é nulo, não é igual, não é 
diferente... Exemplo :
  
  [EMAIL PROTECTED]:SQL>@desc emp
   Nome                                      Nulo?    Tipo
   ----------------------------------------- -------- ----------------
------------
   EMPNO                                     NOT NULL NUMBER(4)
   ENAME                                              VARCHAR2(10)
   JOB                                                VARCHAR2(9)
   MGR                                                NUMBER(4)
   HIREDATE                                           DATE
   SAL                                                NUMBER(7,2)
   COMM                                               NUMBER(7,2)
   DEPTNO                                             NUMBER(2)
  
  [EMAIL PROTECTED]:SQL>select empno, sal, hiredate, comm from emp where 
sal < 1000;
  
               EMPNO                SAL 
HIREDATE                          COMM
  ------------------ ------------------ ------------------- ----------
--------
                7369                800 17/12/1980 00:00:00
                7900                950 03/12/1981 
00:00:00                 10
  
  [EMAIL PROTECTED]:SQL>select sum(sal * comm) from emp where sal < 1000;
  
       SUM(SAL*COMM)
  ------------------
                9500
  
  [EMAIL PROTECTED]:SQL>select sum(comm)  from emp where sal < 1000;
  
           SUM(COMM)
  ------------------
                  10
  
  [EMAIL PROTECTED]:SQL>select sum(sal)  from emp where sal < 1000;
  
            SUM(SAL)
  ------------------
                1750
  
[EMAIL PROTECTED]:SQL>

Vê ? no caso acima, o salário de 800 ** não entro ** na soma de sal * 
comm, porque pra ele comm é nulo, a soma só trouxe 950 * 10 = 9500, 
pois só pro sal de 950 a commissão (de 10) é não-nula... Pela lógica, 
tanto preço quanto quantidade NÂO DEVERIAM ser nulos nunca, imagino 
que não é isso que vc está tendo aí, mas fica a citação...

[]s

 Chiappa
 
--- Em oracle_br@yahoogrupos.com.br, "Wellingthon Cristiano" 
<[EMAIL PROTECTED]> escreveu
>
> Senhores...
> 
> Eu fiz as seguintes consultas:
> 
>  
> 
>   select sum(vei.preco*vei.quantidade) into nVenda
>   from venda ve, venda_item vei
>   where ve.id_venda = vei.id_venda
>     and to_date(ve.data) between to_date('01/12/2006', 'dd/mm/yyyy')
>                              and to_date
('31/12/2006', 'dd/mm/yyyy');
> 
>   select sum(vei.preco*vei.quantidade) into nVenda
>   from venda ve, venda_item vei
>   where ve.id_venda = vei.id_venda
>     and to_char(ve.data,'yyyymm') = '200612';
>   
>   
>   select sum(vei.preco*vei.quantidade) into nVenda
>   from venda ve, venda_item vei
>   where ve.id_venda = vei.id_venda
>     and to_date(ve.data) >= to_date('01/12/2006', 'dd/mm/yyyy')
>     and to_date(ve.data) <= to_date('31/12/2006', 'dd/mm/yyyy');
> 
>  
> 
> que, retornaram cada uma... um valor diferente...
> 
> alguém sabe dizer qual a diferença entre as consultas???
> 
>  
> 
> Wellingthon Cristiano Alves de Araújo 
> UpDate Tecnologia - (31) 3292-3722 - BH-MG 
> Desenvolvimento 
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a