none
Dúvida em sql RRS feed

  • Pergunta

  • Bom dia,

        tenho uma tabela 'movimentos' com os seguintes dados:

        entidade  |  data                |  valor

        cliente1     10/01/2015           150,00

        cliente1     11/01/2015             65,60

        cliente2     10/01/2015             37,00

        cliente2     10/01/2015             10,00

        cliente3     10/01/2015             28,00

        cliente2     11/01/2015             38,00

        A dúvida: como montar um sql com sum dos valores por data, sendo que o cliente3 não tem valor para a data 11/01 (neste caso deveria mostrar o cliente na data com valor zero)?

        Preciso apresentar assim:

        entidade      data                     valor

        cliente1       10/01/2015       150,00

        cliente2       10/01/2015         47,00

        cliente3       10/01/2015         28,00

        cliente1       11/01/2015         65,60

        cliente2       11/01/2015         38,00

        cliente3       11/01/2015           0,00

    sexta-feira, 6 de março de 2015 14:50

Respostas

  • Boa tarde,

    Jone, experimente mais ou menos dessa forma:

    with 
        CTE_Datas as
        (
            select distinct data from Tabela
        ),
        
        CTE_Entidades as
        (
            select distinct entidade from Tabela
        )
        
    select
        e.entidade,
        d.data,
        COALESCE(SUM(t.valor), 0) as valor
    from CTE_Datas as d
    cross join CTE_Entidades as e
    left join Tabela as t
        on 
            t.data = d.data and 
            t.entidade = e.entidade
    group by
        e.entidade,
        d.data

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Sugerido como Resposta André Abreu sexta-feira, 6 de março de 2015 17:35
    • Marcado como Resposta Jone Cunha sexta-feira, 6 de março de 2015 17:39
    sexta-feira, 6 de março de 2015 17:32

Todas as Respostas

  • Jone o select que você pode fazer é esse, caso queira ordenar por valores só acrescentar no final o order by.

    select data, entidade, sum(valor) from [sua tabela]
    group by data, entidade
    order by sum(valor)


    --- André Abreu

    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Editado André Abreu sexta-feira, 6 de março de 2015 15:28
    • Sugerido como Resposta Mr. GMSOFT sexta-feira, 6 de março de 2015 16:33
    sexta-feira, 6 de março de 2015 15:24
  • Oi André,

         dessa forma não resolve meu problema, já tinha desta forma.

         O problema é que assim não traz a entidade caso não tenha nada pra ele em um determinado dia.

         Agradeço a intenção

    sexta-feira, 6 de março de 2015 17:03
  • Jone, no seu caso existe o registro: Entidade = cliente3, Data = 11/01/2015 e Valor = 0,00 na sua tabela?


    --- André Abreu

    sexta-feira, 6 de março de 2015 17:09
  • Não André, não tem este registro. Por isso preciso montar um sql que gere a linha deste cliente3 nesta data com o valor zero.

    Se fosse mais de uma tabela, seria bem tranquilo mas, como está tudo na mesma tabela, não consegui fazer.

    sexta-feira, 6 de março de 2015 17:23
  • Boa tarde,

    Jone, experimente mais ou menos dessa forma:

    with 
        CTE_Datas as
        (
            select distinct data from Tabela
        ),
        
        CTE_Entidades as
        (
            select distinct entidade from Tabela
        )
        
    select
        e.entidade,
        d.data,
        COALESCE(SUM(t.valor), 0) as valor
    from CTE_Datas as d
    cross join CTE_Entidades as e
    left join Tabela as t
        on 
            t.data = d.data and 
            t.entidade = e.entidade
    group by
        e.entidade,
        d.data

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Sugerido como Resposta André Abreu sexta-feira, 6 de março de 2015 17:35
    • Marcado como Resposta Jone Cunha sexta-feira, 6 de março de 2015 17:39
    sexta-feira, 6 de março de 2015 17:32
  • Perfeito, era isso mesmo que eu precisava.

    Agradeço a ajuda!

    sexta-feira, 6 de março de 2015 17:39