none
SQL - Montar select complexo RRS feed

  • Pergunta

  • Galera boa tarde

    tenho uma tabela desta forma

    nome    valor   data

    aaa          1        11/01/2012

    bbb          8        12/02/2012

    aaa          300    15/02/2012

    bbb          66      19/04/2012

    como posso montar um select q mostre os dados neste formato

    nome  jan    fev    mar      abril    maio

    aaa      2      300

    bbb                8                  66

    eu posso fazer isto se sim como poderia fazer

    abraço a todos

    quarta-feira, 5 de dezembro de 2012 16:26

Respostas

  • Segue exemplo:

    -- tabela temporária
    declare @tb as table (Nome char(3), Valor smallint, Data date)
    
    --Populando tabela
    insert into @tb (nome,valor,data) 
    values
    ('aaa',  1, convert(date,'11/01/2012',103)),
    ('bbb',  8, convert(date,'12/02/2012',103)),
    ('aaa',300, convert(date,'15/02/2012',103)),
    ('bbb', 66, convert(date,'19/04/2012',103))
    
    --usando a função Pivot
    SELECT * FROM 
    (
        select Nome, Valor, 
          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 @tb 
    ) as x    
    PIVOT (
            SUM(valor) FOR Mes in ([jan], [fev], [mar], [abr], [mai], [jun], [jul], [ago], [set], [out], [nov], [dez])
           ) as pv
    


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    quarta-feira, 5 de dezembro de 2012 17:01

Todas as Respostas

  • Boa tarde,

    Haverá um filtro para o ano?

    Acho a princípio que você pode utilizar Pivot:

    http://msdn.microsoft.com/en-us/library/ms177410(SQL.105).aspx

    http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx

    Espero que seja útil.


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

    quarta-feira, 5 de dezembro de 2012 16:43
  • seria só o ano de 2012 mesmo
    quarta-feira, 5 de dezembro de 2012 16:43
  • Segue exemplo:

    -- tabela temporária
    declare @tb as table (Nome char(3), Valor smallint, Data date)
    
    --Populando tabela
    insert into @tb (nome,valor,data) 
    values
    ('aaa',  1, convert(date,'11/01/2012',103)),
    ('bbb',  8, convert(date,'12/02/2012',103)),
    ('aaa',300, convert(date,'15/02/2012',103)),
    ('bbb', 66, convert(date,'19/04/2012',103))
    
    --usando a função Pivot
    SELECT * FROM 
    (
        select Nome, Valor, 
          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 @tb 
    ) as x    
    PIVOT (
            SUM(valor) FOR Mes in ([jan], [fev], [mar], [abr], [mai], [jun], [jul], [ago], [set], [out], [nov], [dez])
           ) as pv
    


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    quarta-feira, 5 de dezembro de 2012 17:01
  • Vou testar e posto aqui o resultado!!
    quarta-feira, 5 de dezembro de 2012 17:42
  • Ficou show

    Mas tem como não ser o somatório  do campo valor e apenas o valor por exemplo o mes de janeiro o valor é 1

    segunda-feira, 10 de dezembro de 2012 16:20