none
Maiores meses de venda RRS feed

  • Pergunta

  • Bom dia!

    Prezados,

    Preciso, por favor, de ajuda para criar a seguinte consulta:

    Retornar em um intervalo de 24 meses, a média os seis maiores meses de venda por cliente.

    Agradeço e aguardo resposta.

    quinta-feira, 3 de julho de 2014 14:15

Respostas

  • Cheguei a solução:

    Adicionei a seguinte linha e minha query: Ordem = row_number() over (partition by e.razao_social order by sum(pv.valor_mercadoria - pv.valor_desconto_fin)desc, e.razao_social).

    Vejam o resultado abaixo.

    with
    media as(
    select sum(pv.valor_mercadoria - pv.valor_desconto_fin) as Valor_Mercadoria_Menos_descontofin, 
    datepart (month,pv.data) as mes, datepart (year,pv.data) as ano, e.codigo_entidade, e.razao_social,
    Ordem = row_number() over (partition by e.razao_social order by sum(pv.valor_mercadoria - pv.valor_desconto_fin)desc, e.razao_social)
    from produto_venda pv
    inner join vw_rs_titulo t on pv.cod_titulo = t.id_titulo
    inner join vw_RS_entidade e on t.id_entidade = e.id_entidade
    WHERE data >= '01/01/2012 00:00:00' and  data < DATEADD(dd, 1, '12/31/2013')
    and e.situacao in ('Ativo', 'Bloqueado')
    and t.data_cancelamento is null
    group by datepart (month,pv.data), datepart (year,pv.data), e.codigo_entidade, e.razao_social)

    select Media.razao_social, avg(Media.Valor_Mercadoria_Menos_descontofin) as Bronze,
    avg(Media.Valor_Mercadoria_Menos_descontofin) + (avg(Media.Valor_Mercadoria_Menos_descontofin)*0.25) as Prata,
    avg(Media.Valor_Mercadoria_Menos_descontofin) + (avg(Media.Valor_Mercadoria_Menos_descontofin)*0.5) as Ouro,
    avg(Media.Valor_Mercadoria_Menos_descontofin) + (avg(Media.Valor_Mercadoria_Menos_descontofin)*1) as Diamante
    from media
    where Ordem <= 6
    group by Media.razao_social
    order by Media.razao_social

    quinta-feira, 3 de julho de 2014 20:32

Todas as Respostas

  • Qual a estrutura da tabela (ou tabelas) envolvidas?

    O que você já montou de consulta?

    Os tipos de dados são datetime? date? time?

    Qual a versão do SQL em questão?

    Precisa dos dados tabulados?

    Esta utilizando em relatórios, como o Report Server?

    Poste mais detalhes, pois somente solicitar o que precisa sem ao menos demonstrar a estrutura da consulta e/ou dados fica complicado de lhe ajudar.

    []´s

    quinta-feira, 3 de julho de 2014 14:40
  • Utilizei a query abaixo:

    select Media.razao_social, avg(Media.Valor_Mercadoria_Menos_descontofin) as Bronze,
    avg(Media.Valor_Mercadoria_Menos_descontofin) + (avg(Media.Valor_Mercadoria_Menos_descontofin)*0.25) as Prata,
    avg(Media.Valor_Mercadoria_Menos_descontofin) + (avg(Media.Valor_Mercadoria_Menos_descontofin)*0.5) as Ouro,
    avg(Media.Valor_Mercadoria_Menos_descontofin) + (avg(Media.Valor_Mercadoria_Menos_descontofin)*1) as Diamante
    from
    (select top 6 sum(pv.valor_mercadoria - pv.valor_desconto_fin) as Valor_Mercadoria_Menos_descontofin, 
    datepart (month,pv.data) as mes, datepart (year,pv.data) as ano, e.codigo_entidade, e.razao_social
    from produto_venda pv
    inner join vw_rs_titulo t on pv.cod_titulo = t.id_titulo
    inner join vw_RS_entidade e on t.id_entidade = e.id_entidade
    WHERE data >= '01/01/2012 00:00:00' and  data < DATEADD(dd, 1, '12/31/2013')
    and e.situacao in ('Ativo', 'Bloqueado')
    group by datepart (month,pv.data), datepart (year,pv.data), e.codigo_entidade, e.razao_social
    order by sum(pv.valor_mercadoria - pv.valor_desconto_fin)desc) as Media
    group by Media.razao_social

    quinta-feira, 3 de julho de 2014 15:46
  • Jackson,

    Na verdade temos que tentar entender como os seus dados estão armazenados!!!

    A estrutura das suas tabelas, e quais valores você esta armazenando.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quinta-feira, 3 de julho de 2014 18:55
  • Cheguei a solução:

    Adicionei a seguinte linha e minha query: Ordem = row_number() over (partition by e.razao_social order by sum(pv.valor_mercadoria - pv.valor_desconto_fin)desc, e.razao_social).

    Vejam o resultado abaixo.

    with
    media as(
    select sum(pv.valor_mercadoria - pv.valor_desconto_fin) as Valor_Mercadoria_Menos_descontofin, 
    datepart (month,pv.data) as mes, datepart (year,pv.data) as ano, e.codigo_entidade, e.razao_social,
    Ordem = row_number() over (partition by e.razao_social order by sum(pv.valor_mercadoria - pv.valor_desconto_fin)desc, e.razao_social)
    from produto_venda pv
    inner join vw_rs_titulo t on pv.cod_titulo = t.id_titulo
    inner join vw_RS_entidade e on t.id_entidade = e.id_entidade
    WHERE data >= '01/01/2012 00:00:00' and  data < DATEADD(dd, 1, '12/31/2013')
    and e.situacao in ('Ativo', 'Bloqueado')
    and t.data_cancelamento is null
    group by datepart (month,pv.data), datepart (year,pv.data), e.codigo_entidade, e.razao_social)

    select Media.razao_social, avg(Media.Valor_Mercadoria_Menos_descontofin) as Bronze,
    avg(Media.Valor_Mercadoria_Menos_descontofin) + (avg(Media.Valor_Mercadoria_Menos_descontofin)*0.25) as Prata,
    avg(Media.Valor_Mercadoria_Menos_descontofin) + (avg(Media.Valor_Mercadoria_Menos_descontofin)*0.5) as Ouro,
    avg(Media.Valor_Mercadoria_Menos_descontofin) + (avg(Media.Valor_Mercadoria_Menos_descontofin)*1) as Diamante
    from media
    where Ordem <= 6
    group by Media.razao_social
    order by Media.razao_social

    quinta-feira, 3 de julho de 2014 20:32