2013-12-17 49 views
0

Here是完整的數據和查詢到SqlFiddle的鏈接。)PIVOT忽略MS SQL Server 2008上的某些值?

我有以下表PIVOT inpit我想轉動立足於[Rank]列。

我寫了一個簡單的代碼,這樣做的:

SELECT Url, [1] AS Source1, [2] AS Source2 , [3] AS Source3 
FROM Urls 
PIVOT 
(
    MIN(Source) 
    FOR [rank] IN ([1],[2],[3],[4],[5]) 
) 
AS dtpvt 

在我的數據總是有與rank == 1一排,所以我預計第一列永遠不會包含任何NULL值,但我得到相當奇怪的結果:

PIVOT output

所以,我有多個NULL在我的第一列。我實際上預期rank == 1的值會轉到第一列,rank == 2到第二列等等,但結果表格實際上令我困惑。

我在這裏錯過了什麼?我如何獲得預期的結果?

回答

2

在數據透視中未提及的所有列都用於在結果中生成唯一的行。請注意,您在PIVOT中既不提供Url也不提供Popularity,因此使用這些列的不同值來計算結果行。

爲了消除Popularity被使用,使用子查詢來消除它:

SELECT Url, [1] AS Source1, [2] AS Source2 , [3] AS Source3 
FROM (select Url,Source,Rank from Urls) u 
PIVOT 
(
    MIN(Source) 
    FOR [rank] IN ([1],[2],[3],[4],[5]) 
) 
AS dtpvt 

(此外,它包含的是小提琴,因爲你的問題沒有根本提Popularity列好工作,不知道關於那個額外的專欄,這個問題沒有意義)