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] >