我有一个表channel_merge 像
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值的范围在column1到column512之间 行数不能在8k到20k之间变化 我想要一个矩阵(512X512),其值表示矩阵中各列组合之间的条目数。
我打破了512个100组的int组,用PIVOT处理,然后追加到完整矩阵 使用的枢轴截面如下面的轴查询
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
在一个数据库中运行良好
但最近使用其他数据库。 当我的程序(包含上述查询)运行不同的时间时,它会返回不正确的结果和不同的结果
当我将分组从100列减少到30列时,结果看起来很合适。
您能帮我确定哪些数据库参数正在生效或影响上述查询的结果。
Pivot的任何限制我需要考虑
两个Db都是相同版本的SQL Server 2008 SP2。
提前致谢。
实施例: 输入Channel_merge表(column1到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 :(得分:1)
TADA .. 这个很棘手,但玩得很开心......
declare @distcols as nvarchar(max) = ''
select @distcols=@distcols +'['+ (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)
供您参考: