none
Segmentar resultado mensal, anual e mensal entre mais de 1 ano RRS feed

  • Pergunta

  • galera boa tarde!

    tenho uma query q recupero o valor mensal de um contador de acessos, mas isso consigo para um ano se eu colocar mais de um ano no filtro da query o resultado não será exato, por exemplo

    filtro de 01-03-2012 até 01-04-2013

    os meses de jan, fev, mar terão resultados dos dois ano e não quero isso 

    minha query
    
    select * from( select id_pagina , sum(1) as contador,
    		Case Month(data) 
                            WHEN  1 THEN 'jan' WHEN  2 THEN 'fev'
                            WHEN  3 THEN 'mar' WHEN  4 THEN 'abr' 
                            WHEN  5 THEN 'mai' WHEN  6 THEN 'jun' 
                            WHEN  7 THEN 'jul' WHEN  8 THEN 'ago' 
                            WHEN  9 THEN 'set' WHEN 10 THEN 'out' 
                            WHEN 11 THEN 'nov' WHEN 12 THEN 'dez' 
                        END AS Mes                    
     from tabela1, tabela2 a
     where 1=1
     and id_pagina = PaginaId COLLATE SQL_Latin1_General_CP1_CI_AS
     and data between '01-03-2012' and '01-04-2013'
     group by id_pagina, data
    	) as x
    	PIVOT (  SUM(contador) FOR Mes in ([jan], [fev], [mar], [abr], [mai], [jun], [jul], [ago], [set], [out], [nov], [dez]) 
              ) as pv     
      order by id_pagina

    o resultado seria estes

    id_pagina  jan fev mar abr mai jun jul ago set out nov dez
    119           4 5 13 2 6 6 1 4 2 1 2 1
    122           7 13 9 5 31 4 5 5 7 3 3 6
    127         5 18 16 5 71 8 2 14 6 9 10 6
    7090       47 53 170 35 21 53 43 26 17 12 13 23
    8001      NULL NULL 10 1 NULL NULL 2 NULL NULL 1 NULL NULL
    8007       5 8 36 4 12 5 18 14 6 5 5 2
    8009       4 20 57 3 6 5 8 4 3 6 1 2
    8014       3 22 18 4 15 7 20 6 4 2 4 5

    Tem como fazer isto sem add dados de dois ano no mesmo mês?

    Obrigado pela atenção

    Abraço a todos

    terça-feira, 14 de maio de 2013 15:21

Respostas

  • Deleted
    • Marcado como Resposta Brown11 quarta-feira, 15 de maio de 2013 12:55
    terça-feira, 14 de maio de 2013 21:24
  • Deleted
    • Marcado como Resposta Brown11 sexta-feira, 7 de junho de 2013 12:50
    sexta-feira, 7 de junho de 2013 01:14
  • Deleted
    • Marcado como Resposta Brown11 segunda-feira, 10 de junho de 2013 14:13
    sexta-feira, 7 de junho de 2013 23:01
  • José Bom dia!

    Consegui o total por coluna (horizontal) 

    com :

    Criei a variavel @SomaLinhas  atribui o trecho a baixo:

    set @SomaLinhas += 'Sum([' + substring(@AbrevDias, ((day(@xDataM)-1)*2+1), 2) + 
                                                         '/' + left('0' + cast(month(@xDataM) as varchar(2)),2) + ']),'; -- linha nova

    e criando um union 

    na query de baixo eu trago o resultado do @SomaLinhas  ai funcionou 

    Mas o ruim disso dependendo do filtro q o usuário utilizar a query fica mto grande ultrapassando até o limite de 8000 caracters

    Abraço

    • Marcado como Resposta Brown11 terça-feira, 16 de julho de 2013 14:29
    sexta-feira, 12 de julho de 2013 12:32

Todas as Respostas

  • Vejo 2 maneiras, no seu case voce esta considerando somente o mes, se 1 mesmo mes estiver do seu filtro de varios anos com certeza vão ser computados todos os anos do seu filtro.

    Outra coisa é o seu filtro de data, voce esta pegando de 01/03/12 até 01/04/13 repare que tem mes igual nos 2 anos, o ideal seria voce restringir a somente 1 ano ou entao mudar o seu case.


    Alexandre Matayosi Conde Mauricio.

    terça-feira, 14 de maio de 2013 15:29
  • Não posso restringir para um ano só
    terça-feira, 14 de maio de 2013 20:52
  • O valor do dia pode ser qualquer dia não somente o dia 01
    terça-feira, 14 de maio de 2013 20:53
  • a data é um campo datetime sim

    mas o resultado que me trouxe com a query q eu coloquei acumulou os meses repetidos de anos diferentes

    e neste caso não posso limitar a 1 ano

    terça-feira, 14 de maio de 2013 20:55
  • José muito bom este SQL Dinâmico

    Adequei aqui ao q eu queria eu funcionou mto bem

    vlw mto obrigado!!!

    quarta-feira, 15 de maio de 2013 12:56
  • Existe a possibilidade de além de trazer os meses ter um total deles??
    segunda-feira, 27 de maio de 2013 18:28
  • Boa noite,

    O que pensei é que poderia usar o count com over(partition by ano order by ano), da uma olhada no link

    http://msdn.microsoft.com/en-us/library/ms189461.aspx

    segunda-feira, 27 de maio de 2013 21:46
  • Opa desculpe a demora estava enrolado

    Total horizontal de cada id_pagina

    tentei fazer um sum do contador mais não deu certo 

    Abraço

    segunda-feira, 3 de junho de 2013 14:14
  • Gostaria de totalizar tbm no formato horizontal

    para ter o total de cada página

    fazendo um sum do contador não funcionou ele não reconhece o campo contador 

    quinta-feira, 6 de junho de 2013 17:24
  • Entendi criando esta variável ele aceitou lá no select list o q não acontecia com o sum(contador) q eu estava tentando fazer.

    só uma coisa: caso tenha um mês sem valor ( valor null)  ele simplesmente coloca null na contagem mesmo q os outros meses tenha valor.

    vou tentar atribuir 0 nele aonde vem null

    sexta-feira, 7 de junho de 2013 13:00
  • Valeu ficou mto bom!

    o lance do null acrescentei 

    set @SomaColunas += 'isnull([' + substring(@AbrevMeses, ((month(@xDataM)-1)*3+1), 3) + 
                          '/' + cast(year(@xDataM) as char(4)) + '],0)+'; -- linha nova

    colocando 0 e funcionou bem 

    muito obrigado José

    sexta-feira, 7 de junho de 2013 13:36
  • José boa tarde

    se eu quisesse pegar o dia seria algo tipo isso

    set @ColunasDias+= '[' + substring(@AbrevDias, ((day(@xDataM)-1)*2+1), 2) +
                  '/' + cast(month(@xDataM) as char(2)) + '], '

    Esse trecho o q siginifica : (day(@xDataM)-1)*2+1)

    Abraço

    sexta-feira, 7 de junho de 2013 20:15
  • Olá josé  tudo bem?

    Te perguntei se dava para fazer o total e vc perguntou se era na vertical ou horizontal.

    Fizemos na horizontal

    e na vertical no lugar das páginas tem como fazer um total tbm ?

    domingo, 30 de junho de 2013 20:00
  • opa o lance do null coloquei zero com a função isnull

    mas o lance do total vertical ainda não consegui bolar algo 

    domingo, 7 de julho de 2013 21:22
  • José Bom dia!

    Consegui o total por coluna (horizontal) 

    com :

    Criei a variavel @SomaLinhas  atribui o trecho a baixo:

    set @SomaLinhas += 'Sum([' + substring(@AbrevDias, ((day(@xDataM)-1)*2+1), 2) + 
                                                         '/' + left('0' + cast(month(@xDataM) as varchar(2)),2) + ']),'; -- linha nova

    e criando um union 

    na query de baixo eu trago o resultado do @SomaLinhas  ai funcionou 

    Mas o ruim disso dependendo do filtro q o usuário utilizar a query fica mto grande ultrapassando até o limite de 8000 caracters

    Abraço

    • Marcado como Resposta Brown11 terça-feira, 16 de julho de 2013 14:29
    sexta-feira, 12 de julho de 2013 12:32