none
Ajuda com Select RRS feed

  • Pergunta

  • Pessoal, tenho uma tabela pedidos

    [codigo, data, total]

    gostaria de fazer um select que me retornasse o total das vendas dos últimos 7 dias, mesmo que não tenha venda, ex:

    1º - 01/01/2014 - R$ 10,00
    2º - 02/01/2014 - R$ 00,00
    3º - 03/01/2014 - R$ 100,00
    4º - 04/01/2014 - R$ 56,00
    5º - 05/01/2014 - R$ 92,00
    6º - 06/01/2014 - R$ 0,00
    7º - 07/01/2014 - R$ 0,00

    se eu fizer um "select data, sum(total) from tabela group by data" ele só me traz os registros que teve venda, no caso somente:

    1º - 01/01/2014 - R$ 10,00
    3º - 03/01/2014 - R$ 100,00
    4º - 04/01/2014 - R$ 56,00
    5º - 05/01/2014 - R$ 92,00

    Obrigado!

    sexta-feira, 14 de novembro de 2014 13:12

Respostas

  • Bom dia,

    Experimente mais ou menos dessa forma:

    with CTE_Datas as
    (
        select DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP) - 1, 0) as Data, 1 as Seq
        
        union all
        
        select DATEADD(DAY, -1, Data), Seq + 1
        from CTE_Datas
        where
            Seq < 7
    )
    
    select 
        d.Data,
        sum(t.Total) as Total
    from CTE_Datas as d
    left join Tabela as t
        on t.Data = d.Data
    group by
        d.Data

    Espero que ajude.


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

    sexta-feira, 14 de novembro de 2014 13:40
  • Oi Dark,

    Montei um exemplo aqui e funcionou perfeitamente.

    CREATE TABLE #TEMP
    (ID INT NOT NULL IDENTITY(1,1),
     DT DATE,
     VALOR MONEY)
     
    INSERT INTO #TEMP	VALUES('2014-11-10', '550,00')
    INSERT INTO #TEMP	VALUES ('2014-11-10', '250,00')
    INSERT INTO #TEMP	VALUES ('2014-11-10', '110,00')
    INSERT INTO #TEMP	VALUES ('2014-11-11', '100,00')
    INSERT INTO #TEMP	VALUES ('2014-11-11', '60,00')
    INSERT INTO #TEMP	VALUES ('2014-11-12', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-12', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-13', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-14', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-15', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-16', '100,00')
    INSERT INTO #TEMP	VALUES ('2014-11-16', '60,00')
     
    SELECT DT, SUM(VALOR) VL FROM #TEMP 
    WHERE #TEMP.DT > GETDATE()-7
    GROUP BY #TEMP.DT
    
     
    DROP TABLE #TEMP

    Compare o seu script com o meu e veja o que está diferente e altere conforme necessário.

    Se lhe foi útil, avalie!

    Abraços,

    Anderson


    Se o meu conteúdo resolveu o seu problema ou sua dúvida, então marque como "Resposta", ou se foi útil, "Vote". Pois isso ajudará outras pessoas com o mesmo problema ou dúvida.

    • Sugerido como Resposta Ruberlei sexta-feira, 14 de novembro de 2014 15:33
    • Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 14 de novembro de 2014 17:42
    sexta-feira, 14 de novembro de 2014 13:45
  • Dark,

    Só complementando o código do nosso amigo acima, no CTE na expressão faltou as colunas (data, seq)

    with CTE_Datas (data, seq)
    as
    (
        select DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP) - 1, 0) as Data, 1 as Seq
        
        union all
        
        select DATEADD(DAY, -1, Data), Seq + 1
        from CTE_Datas
        where
            Seq < 7
    )

    sexta-feira, 14 de novembro de 2014 13:58

Todas as Respostas

  • Bom dia,

    Experimente mais ou menos dessa forma:

    with CTE_Datas as
    (
        select DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP) - 1, 0) as Data, 1 as Seq
        
        union all
        
        select DATEADD(DAY, -1, Data), Seq + 1
        from CTE_Datas
        where
            Seq < 7
    )
    
    select 
        d.Data,
        sum(t.Total) as Total
    from CTE_Datas as d
    left join Tabela as t
        on t.Data = d.Data
    group by
        d.Data

    Espero que ajude.


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

    sexta-feira, 14 de novembro de 2014 13:40
  • Oi Dark,

    Montei um exemplo aqui e funcionou perfeitamente.

    CREATE TABLE #TEMP
    (ID INT NOT NULL IDENTITY(1,1),
     DT DATE,
     VALOR MONEY)
     
    INSERT INTO #TEMP	VALUES('2014-11-10', '550,00')
    INSERT INTO #TEMP	VALUES ('2014-11-10', '250,00')
    INSERT INTO #TEMP	VALUES ('2014-11-10', '110,00')
    INSERT INTO #TEMP	VALUES ('2014-11-11', '100,00')
    INSERT INTO #TEMP	VALUES ('2014-11-11', '60,00')
    INSERT INTO #TEMP	VALUES ('2014-11-12', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-12', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-13', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-14', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-15', '0,00')
    INSERT INTO #TEMP	VALUES ('2014-11-16', '100,00')
    INSERT INTO #TEMP	VALUES ('2014-11-16', '60,00')
     
    SELECT DT, SUM(VALOR) VL FROM #TEMP 
    WHERE #TEMP.DT > GETDATE()-7
    GROUP BY #TEMP.DT
    
     
    DROP TABLE #TEMP

    Compare o seu script com o meu e veja o que está diferente e altere conforme necessário.

    Se lhe foi útil, avalie!

    Abraços,

    Anderson


    Se o meu conteúdo resolveu o seu problema ou sua dúvida, então marque como "Resposta", ou se foi útil, "Vote". Pois isso ajudará outras pessoas com o mesmo problema ou dúvida.

    • Sugerido como Resposta Ruberlei sexta-feira, 14 de novembro de 2014 15:33
    • Marcado como Resposta Ricardo Barbosa Cortes sexta-feira, 14 de novembro de 2014 17:42
    sexta-feira, 14 de novembro de 2014 13:45
  • Dark,

    Só complementando o código do nosso amigo acima, no CTE na expressão faltou as colunas (data, seq)

    with CTE_Datas (data, seq)
    as
    (
        select DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP) - 1, 0) as Data, 1 as Seq
        
        union all
        
        select DATEADD(DAY, -1, Data), Seq + 1
        from CTE_Datas
        where
            Seq < 7
    )

    sexta-feira, 14 de novembro de 2014 13:58
  • Dark,

    Só complementando o código do nosso amigo acima, no CTE na expressão faltou as colunas (data, seq)

    with CTE_Datas (data, seq)
    as
    (
        select DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP) - 1, 0) as Data, 1 as Seq
        
        union all
        
        select DATEADD(DAY, -1, Data), Seq + 1
        from CTE_Datas
        where
            Seq < 7
    )

    A query também funciona da forma como sugeri, sem especificar os nomes das colunas, já que foram utilizados aliases para as colunas na primeira parte da query da CTE.

    Abs


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

    • Sugerido como Resposta CEFL sexta-feira, 14 de novembro de 2014 14:11
    sexta-feira, 14 de novembro de 2014 14:09