PIVOT给予不正确的输出时没有列的增加

问题描述:

我有一个表channel_merge 像PIVOT给予不正确的输出时没有列的增加

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 

其中columnX值列1之间的范围,以column512 没有行可到20K 8K之间各不相同,我想一个矩阵(512X512),其值代表矩阵中各列组合之间的条目数。

我打破了100 512个INT组,过程与PIVOT,后来追加到全矩阵 使用的支点finction是如下支点查询

select [COLUMN1],[COLUMN10],[COLUMN100],[COLUMN101],[COLUMN102],[COLUMN103],[COLUMN104],[COLUMN105],[COLUMN106],[COLUMN107],[COLUMN108],[COLUMN109],[COLUMN11],[COLUMN110],[COLUMN111],[COLUMN112],[COLUMN113],[COLUMN114]..100 columns INTO FINAL1 
from 
(
select channel_1,channel_1 as CHANNEL_11,CHANNEL_2 from CHANNEL_MERGE 
) P 
pivot 
(
count(CHANNEL_11) for CHANNEL_2 in ([COLUMN1],[COLUMN10],[COLUMN100],[COLUMN101],[COLUMN102],[COLUMN103],[COLUMN104],[COLUMN105],[COLUMN106],[COLUMN107],[COLUMN108],[COLUMN109],[COLUMN11],[COLUMN110],[COLUMN111],[COLUMN112],[COLUMN113],[COLUMN114]....100columns) 
) as pvt 

在一个DB

工作得很好,但最近使用它的其他数据库。 与我的程序(包含上述查询)运行不同时间时,它返回不正确的结果和不同的结果

当我将组从100列减少到30列时,结果看起来是正确的。

请帮我确定哪些数据库参数影响或可以影响上述查询的结果。

枢纽的任何限制,我需要在审议

两个数据库是同一版本的SQL Server 2008 SP2的。

在此先感谢。

例子: 输入Channel_merge表(列1至column5)考虑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 

所以预期输出是矩阵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 
+0

你能否提供一些样本数据和预期的输出? – FutbolFan

TADA .. 这一个是棘手,但很开心这样做..

declare @distcols as nvarchar(max) = '' 
select @[email protected] +'['+ (a.channel_2)+'],' from (select distinct channel_2 from TableName) a 
set @distcols = substring(@distcols,0,len(@distcols)) 
declare @dynamicsql as nvarchar(max) = 'select * from 
( 
     select channel_1, channel_2, count(channel_1) as distinctcount from TableName 
     group by channel_1, channel_2 

) as sourcetable 
pivot 
(
    Min(distinctcount) 
    FOR channel_2 IN (' 

set @dynamicsql = @dynamicsql + @distcols + ') 
) 
as pivottable' 

print @dynamicsql 
exec (@dynamicsql) 

供您参考:

enter image description here

+0

感谢您的输入和时间.. 我的问题是它在服务器失败..当你在@distcolumns中分组100列(whi它成功的在其他服务器).. 当减少到60列..它的作品。 .. 但在channel_merge中数据增加时失败.. 我希望它的服务器存储器问题(不确定。).. – user3227783

+0

“失败”是什么意思?它显示任何特定的错误? –

+0

对不起,它返回不正确的(矩阵值将混乱)输出,但没有任何错误.. 现在我发现表列(channel_1和channel_2)被定义为varchar(2000)(由一些actaully)..现在我chnaged它到varchar(130)(这是必要的) 和结果看起来是合适的.. 我认为,当处理..它需要更多的内存,并导致输出损坏(我不知道) 但现在看起来很好。 。 – user3227783