Usuário com melhor resposta
SQL - Montar select complexo

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
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
- Sugerido como Resposta Advaldo Mesquita Moreira Junior quarta-feira, 5 de dezembro de 2012 17:20
- Marcado como Resposta Brown11 segunda-feira, 10 de dezembro de 2012 16:13
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
-
-
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
- Sugerido como Resposta Advaldo Mesquita Moreira Junior quarta-feira, 5 de dezembro de 2012 17:20
- Marcado como Resposta Brown11 segunda-feira, 10 de dezembro de 2012 16:13
-
-