Usuário com melhor resposta
Transformar SELECT de Linhas em Colunas

Pergunta
-
Respostas
-
Vou te dar um exemplo utilizando o PIVOT que eu precisei utilizar no meu trabalho. Vou colocar abaixo a query de exemplo da criação da tabela, como seria a query inicial e a query modificada:
-- Criando a tabela
USE [teste]
GO/****** Object: Table [dbo].[vendas] Script Date: 11/23/2011 09:07:47 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOSET ANSI_PADDING ON
GOCREATE TABLE [dbo].[vendas](
[id] [int] IDENTITY(1,1) NOT NULL,
[orcamento] [varchar](50) NULL,
[data] [datetime] NULL,
[valor] [decimal](18, 4) NULL
) ON [PRIMARY]GO
SET ANSI_PADDING OFF
GO-- Query incial
SELECT month([data]) as Mes,sum([valor]) AS Total
FROM [teste].[dbo].[vendas]
group by month([data])-- Query modificada
SELECT 'Total' AS Mes,
[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]
FROM
(SELECT month([data]) as Mes,([valor]) AS Total
FROM [teste].[dbo].[vendas]) AS SourceTable
PIVOT
(
SUM(Total)
FOR Mes IN ([1] , [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS PivotTable
Guilherme Costa - Engenheiro de Sofware
Email: guilerme18@hotmail.comSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Guilherme Costa - Campinas - SP sexta-feira, 25 de novembro de 2011 19:56
- Marcado como Resposta Eder Costa quarta-feira, 30 de novembro de 2011 14:18
-
Boa Tarde,
Sugiro uma olhada nos links abaixo:
Transformando Linhas em Colunas com o SQL Server 2005
http://gustavomaiaaguiar.wordpress.com/2008/09/28/transformando-linhas-em-colunas-com-o-sql-server-2005/Pivoteando, Despivoteando, Transpondo, Invertendo Colunas e Linhas no SQL Server
http://gustavomaiaaguiar.wordpress.com/2009/07/13/pivoteando-despivoteando-transpondo-invertendo-colunas-e-linhas-no-sql-server/[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos: http://www.youtube.com/user/gmasql
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar sexta-feira, 25 de novembro de 2011 15:48
- Marcado como Resposta Eder Costa quarta-feira, 30 de novembro de 2011 14:18
Todas as Respostas
-
+- com select puro so usando case, mais vc. pode usar essa rotina de exemplo:
http://www.forumweb.com.br/artigos/artigos.php?action=file&id=324
abs;
-
-
-
Jorge,
Completando a resposta do Marcelo, veja se este exemplo pode a ajudar:
Select
Campo1=(Case When Campo1 = 1 Then Campo1)
Campo2=(Case When Campo2 = 2 Then Campo2)
From SuaTable
Este exemplo foi criado sem levar em consideração qualquer regra de negócios.
-
-
Junior,
Este exemplo também não me atende, pois eu não sei o valor dos campos. A tabela em questão é de entrega de um item do Pedido de Compra. Tenho n entrega para o item, com qtd e data. Quero que a lista de entregas vira uma linha com os campos qtd e data, de cada linha, virando colunas. Talvez não seja possível fazer isso.
Abraços,
Jorge.
-
-
-
Vou te dar um exemplo utilizando o PIVOT que eu precisei utilizar no meu trabalho. Vou colocar abaixo a query de exemplo da criação da tabela, como seria a query inicial e a query modificada:
-- Criando a tabela
USE [teste]
GO/****** Object: Table [dbo].[vendas] Script Date: 11/23/2011 09:07:47 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOSET ANSI_PADDING ON
GOCREATE TABLE [dbo].[vendas](
[id] [int] IDENTITY(1,1) NOT NULL,
[orcamento] [varchar](50) NULL,
[data] [datetime] NULL,
[valor] [decimal](18, 4) NULL
) ON [PRIMARY]GO
SET ANSI_PADDING OFF
GO-- Query incial
SELECT month([data]) as Mes,sum([valor]) AS Total
FROM [teste].[dbo].[vendas]
group by month([data])-- Query modificada
SELECT 'Total' AS Mes,
[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]
FROM
(SELECT month([data]) as Mes,([valor]) AS Total
FROM [teste].[dbo].[vendas]) AS SourceTable
PIVOT
(
SUM(Total)
FOR Mes IN ([1] , [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS PivotTable
Guilherme Costa - Engenheiro de Sofware
Email: guilerme18@hotmail.comSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Guilherme Costa - Campinas - SP sexta-feira, 25 de novembro de 2011 19:56
- Marcado como Resposta Eder Costa quarta-feira, 30 de novembro de 2011 14:18
-
Boa Tarde,
Sugiro uma olhada nos links abaixo:
Transformando Linhas em Colunas com o SQL Server 2005
http://gustavomaiaaguiar.wordpress.com/2008/09/28/transformando-linhas-em-colunas-com-o-sql-server-2005/Pivoteando, Despivoteando, Transpondo, Invertendo Colunas e Linhas no SQL Server
http://gustavomaiaaguiar.wordpress.com/2009/07/13/pivoteando-despivoteando-transpondo-invertendo-colunas-e-linhas-no-sql-server/[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos: http://www.youtube.com/user/gmasql
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar sexta-feira, 25 de novembro de 2011 15:48
- Marcado como Resposta Eder Costa quarta-feira, 30 de novembro de 2011 14:18