goruks 0 Denunciar post Postado Outubro 7, 2009 Olá, estou fazendo um sql que junta 3 tabelas porem estou com problema no group by no campo data_registro que é do tipo date o sql nao retorna o mesmo valor do somatorio das tabelas separadamente... se eu retirar o campo data_registro os somatorios ficam certos o estranho é que ja tentei separar a data em colunas dia mes ano para ver se funcionava com a funcao do oracle extract extract(day from data_registro) as dia extract(month from data_registro) as mes extract(year from data_registro) as ano colocando dia mes ano separados tambem nao funcionou ai eu retirei dia e mes deixando apenas o ano e os somatorios ficavam certos alguem ja viu algo parecido? group by divergir no sum com colunas tipo date eu achei esse topico no forum da oracle porem nao colcaram nenhuma explicacao ou solucao http://glufke.net/oracle/viewtopic.php?t=3713 para juntar ficaria assim select coluna1, coluna2, coluna3, data_registro, sum(valor1) as valor1, sum(valor2) as valor2, sum(valor3) as valor3 from( --a tabela 1 so possui o valor 1 SELECT coluna1, coluna2, coluna3, data_registro, valor1, 0 as valor2, 0 as valor3 from tabela1 UNION ALL --a tabela2 so possui o valor2 SELECT coluna1, coluna2, coluna3, data_registro, 0 as valor1, valor2, 0 as valor3 from tabela2 UNION ALL --a tabela 3 so possui o valor 3 SELECT coluna1, coluna2, coluna3, data_registro, 0 as valor1, 0 as valor2, valor3 from tabela3 ) group by coluna1, coluna2, coluna3, data_registro Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 7, 2009 O tipo DATE do Oracle tem a data e a hora, pode ser este o problema, tente com um TRUNC Onde está data_registro faça trunc(data_registro) Pode ser isto. Compartilhar este post Link para o post Compartilhar em outros sites
goruks 0 Denunciar post Postado Outubro 7, 2009 testei com o trunc() e nao deu certo :( quando sao feitos os inserts so é inserido dia mes ano, a hora esta como 00:00:00 gmt -3:00 em todos Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 7, 2009 Pode ser também um problema de espaços nos campos alfa , "Motta" é diferente de "Motta " Um trim(coluna1) Compartilhar este post Link para o post Compartilhar em outros sites
goruks 0 Denunciar post Postado Outubro 7, 2009 acho que nao é isso nao pq se eu tirar a data do sql o valor fica certo, e mesmo se fosse problemas de espaco o somatorio total teria que bater pq nesse caso ficaria "Motta " coluna2 coluna3 valor1 valor2 valor3 Motta coluna2 coluna3 valor1 valor2 valor3 ai somanto o total bateria... esse é o problema o somatorio total n bate eu simplesmente dei union em 3 tabela e mandei somar nao vejo grande complicacao para isso :/ Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 7, 2009 O select é este mesmo sem condição de where , ou tem algum where que envolva data ? Compartilhar este post Link para o post Compartilhar em outros sites
goruks 0 Denunciar post Postado Outubro 8, 2009 é so esse mesmo, agora veja que estranho eu criei uma view so com a parte dos union create view teste as --a tabela 1 so possui o valor 1 SELECT coluna1, coluna2, coluna3, data_registro, valor1, 0 as valor2, 0 as valor3 from tabela1 UNION ALL --a tabela2 so possui o valor2 SELECT coluna1, coluna2, coluna3, data_registro, 0 as valor1, valor2, 0 as valor3 from tabela2 UNION ALL --a tabela 3 so possui o valor 3 SELECT coluna1, coluna2, coluna3, data_registro, 0 as valor1, 0 as valor2, valor3 from tabela3 e ai fiz o somatorio da view select coluna1, coluna2, coluna3, data_registro, sum(valor1) as valor1, sum(valor2) as valor2, sum(valor3) as valor3 from teste group by coluna1, coluna2, coluna3, data_registro e o somatorio deu certo... nao entendo como essas coisas acontecem Compartilhar este post Link para o post Compartilhar em outros sites