Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

goruks

Erro com Group by com sub query

Recommended Posts

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

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

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

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

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

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

é 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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.