Creating Pivot table with cursor dynamically

One of the interesting topics in SQL Server are Pivot tables, but in practice time for many programmers this topic sometimes is difficult or
some programmers cannot write grammar code for this problems. In this article I will show techniques for creating pivot tables with a cursor dynamically. First, we need table, but I will create table with default inserting rand() price from system.

create table #pivot
(col1 int,
col2 int,
value1 decimal(6,2) default(
(case (cast(rand()+.5 as int)*-1) when 0 then 1
else -1 end)*(convert(int,rand()*100000)%10000)*rand()
)
)

and then inserting data to #pivot table

insert #pivot (col1,col2) values(1,1)
insert #pivot (col1,col2) values(1,2)
insert #pivot (col1,col2) values(1,3)
insert #pivot (col1,col2) values(1,4)
insert #pivot (col1,col2) values(1,5)
insert #pivot (col1,col2) values(1,6)
insert #pivot (col1,col2) values(2,1)
insert #pivot (col1,col2) values(2,2)
insert #pivot (col1,col2) values(2,3)
insert #pivot (col1,col2) values(2,4)
insert #pivot (col1,col2) values(2,5)
insert #pivot (col1,col2) values(2,6)
insert #pivot (col1,col2) values(2,7)
insert #pivot (col1,col2) values(3,1)
insert #pivot (col1,col2) values(3,2)
insert #pivot (col1,col2) values(3,3)

with this code we was inserting to col1,col2 column #pivot table

column value1 was inserted from system with rand() price

select * from #pivot

col1 col2 value1
———— ———— —————————————
1 1 1014.31
1 2 33.27
1 3 6342.69
1 4 85.21
1 5 2607.97
1 6 -3432.93
2 1 -1721.79
2 2 -4844.58
2 3 -582.77
2 4 -259.22
2 5 1735.89
2 6 -1549.44
2 7 2482.01
3 1 -719.52
3 2 -5258.93
3 3 -1335.91

(16 row(s) affected)

and int next step for this data we will creating pivot table with cursor dynamically

declare s cursor
for
select distinct col2 from #pivot order by col2
declare @col2 int,@col2str varchar(10),@sql varchar(8000)
open s
fetch s into @col2
set @sql=»
while (@@fetch_status=0)begin
set @col2str=cast(@col2 as varchar)
set @sql=@sql+’,sum(case when col2=’ + @col2str+’then value1
else null end) [‘+@col2str+’]’
fetch s into @col2
end

set @sql=’select col1’+@sql+’ from #pivot group by col1′
exec(@sql)

close s
deallocate s
drop table #pivot

col1 1 2 3 4 5 6 7
——— ——— ————————————————- ———————
1 3305.19 -302.17 1625.63 -1042.23 -4998.37 -1936.90 NULL
2 -4784.91 5696.81 1792.75 2492.30 -1279.02 -6012.10 1551.19
3 -793.50 2432.62 -1121.00 NULL NULL NULL NULL

and result was success.

you can also can see this aritcle in msdn too:

https://social.technet.microsoft.com/wiki/contents/articles/37850.creating-pivot-table-with-cursor-dynamically.aspx

Реклама
Creating Pivot table with cursor dynamically

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s