sql server - PIVOT giving incorrect output when no of columns increase -
i have table channel_merge like
channel_1 | channel_2 ---------------------- column1 | column343 column1 | column392 column1 | column267 column1 | column198 column1 | column400 column2 | column348 column2 | column97 column1 | column97 column3 | column343 column3 | column65 column4 | column33
where columnx values ranges between column1 column512 no of rows can vary between 8k 20k , wanted matrix (512x512) value representing number of entries between respective combination of columns in matrix.
i broke 512 int groups of 100, process pivot , later append full matrix pivot finction used following pivot query
select [column1],[column10],[column100],[column101],[column102],[column103],[column104],[column105],[column106],[column107],[column108],[column109],[column11],[column110],[column111],[column112],[column113],[column114]..100 columns final1 ( select channel_1,channel_1 channel_11,channel_2 channel_merge ) p pivot ( count(channel_11) channel_2 in ([column1],[column10],[column100],[column101],[column102],[column103],[column104],[column105],[column106],[column107],[column108],[column109],[column11],[column110],[column111],[column112],[column113],[column114]....100columns) ) pvt
which worked fine in 1 db
but using other db. returns incorrect results , different results when ran different times procedure(containing above query)
when reduced grouping 100 columns 30 columns results proper.
could please me in determining db parameter(s) effecting or can effect result of above query.
any limitation of pivot need take in consideration
both db of same version sql server 2008 sp2.
thanks in advance.
example: input channel_merge table (column1 column5)considering 5x5
channel_1 channel_2 column1 column2 column2 column1 column2 column3 column2 column3 column2 column3 column2 column4 column3 column2 column3 column2 column3 column2 column3 column5 column3 column5 column4 column2 column5 column3 column5 column3
so expected output matrix 5x5
0 1 0 0 0 1 0 3 1 0 0 3 0 0 2 0 1 0 0 0 0 0 2 0 0
tada.. 1 tricky, had fun doing it..
declare @distcols nvarchar(max) = '' select @distcols=@distcols +'['+ (a.channel_2)+'],' (select distinct channel_2 tablename) set @distcols = substring(@distcols,0,len(@distcols)) declare @dynamicsql nvarchar(max) = 'select * ( select channel_1, channel_2, count(channel_1) distinctcount tablename group channel_1, channel_2 ) sourcetable pivot ( min(distinctcount) channel_2 in (' set @dynamicsql = @dynamicsql + @distcols + ') ) pivottable' print @dynamicsql exec (@dynamicsql)
for reference :
Comments
Post a Comment