Created
February 7, 2017 00:44
-
-
Save kaizenforce/1bc942e5895f33b7d4fd85ab2663baea to your computer and use it in GitHub Desktop.
Query Pivot Estático vs Dinámico
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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