2015-06-14 28 views
1

我有一個表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

回答

1

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

相關問題