Skip to content

Instantly share code, notes, and snippets.

@kaizenforce
Created February 7, 2017 00:44
Show Gist options
  • Save kaizenforce/1bc942e5895f33b7d4fd85ab2663baea to your computer and use it in GitHub Desktop.
Save kaizenforce/1bc942e5895f33b7d4fd85ab2663baea to your computer and use it in GitHub Desktop.
Query Pivot Estático vs Dinámico
create table dbo.Ejemplos(
CodPersona smallint identity(1,1) primary key,
Persona nvarchar(35),
Mes nvarchar(10),
Monto decimal(5,2)
)
go
insert into dbo.Ejemplos(Persona, Mes, Monto) values ('Jameson','Enero',125.2)
insert into dbo.Ejemplos(Persona, Mes, Monto) values ('Cesar','Febrero',35.5)
insert into dbo.Ejemplos(Persona, Mes, Monto) values ('Jorge','Enero',30.1)
insert into dbo.Ejemplos(Persona, Mes, Monto) values ('Cesar','Marzo',55.8)
insert into dbo.Ejemplos(Persona, Mes, Monto) values ('Jorge','Abril',25.0)
insert into dbo.Ejemplos(Persona, Mes, Monto) values ('Jameson','Abril',30.1)
insert into dbo.Ejemplos(Persona, Mes, Monto) values ('Jameson','Enero',55.8)
insert into dbo.Ejemplos(Persona, Mes, Monto) values ('Jorge','Febrero',25.0)
insert into dbo.Ejemplos(Persona, Mes, Monto) values ('Cesar','Enero',55.8)
go
select * from dbo.Ejemplos
go
SELECT Persona,
isnull([Enero],0)[Enero],
isnull([Febrero],0)[Febrero],
isnull([Marzo],0)[Marzo],
isnull([Abril],0)[Abril]
FROM
(
SELECT Persona, Mes, Monto
FROM dbo.Ejemplos) AS TablaDatos
PIVOT
(
--sumamos el valor a mostrar
sum(Monto)
FOR Mes IN ([Enero],[Febrero],[Marzo],[Abril])
) AS PivotTable;
go
--pivot dinámico
declare @query varchar(4000)
declare @Columns varchar(2000)
--obtenemos las columnas de la pivot
select
@Columns=STUFF((select Distinct'],['
+ mes from dbo.Ejemplos
order by '],['+ mes for XML PATH('') ),1,2,'')+']'
set @query='Select * from
(
SELECT Persona, Mes, Monto
FROM dbo.Ejemplos
)t
PIVOT
(
--sumamos el valor a mostrar
sum(Monto)
--ponemos el nombre de la variable
--de columnas
FOR Mes IN ('+@Columns+')
) AS PivotTable;
'
execute (@Query)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment