2015-01-16 47 views
2

我一直在用錯誤的方式處理一個問題。我研究支點例子sql server從一列到三列的數據透視字符串

http://www.codeproject.com/Tips/500811/Simple-Way-To-Use-Pivot-In-SQL-Query How to create a pivot query in sql server without aggregate function

但他們不是我要找的類型..或者也許我在錯誤的方式接近這一點,我是新來的sql服務器。

我想改造:

學生:

studid | firstname | lastname | school 
----------------------------------------- 
1   mike   lee  harvard 
1   mike   lee  ucdavis 
1   mike   lee  sfsu 
2   peter  pan  chico 
2   peter  pan  ulloa 
3   peter  smith  ucb    

所需的輸出:(注:對於學校,只想要3列最大值)

studid| firstname | lastname | school1 | school2 | school3 
--------------------------------------------------------------------- 
1  mike  lee   Harvard ucdavis sfsu 
2  peter  pan   chico  ulloa 
3  peter  smith   ucb 

我看到的教程顯示了使用Sum(),count()...但我不知道如何將一列的字符串值轉換爲三列。

回答

2

你可以通過對每個樞軸值取最大值(學校)來得到你想要的結果。我猜你所希望的數據是由學生劃分的。這將是查詢爲:

select * from 
(select *, rank() over (partition by studid order by school) rank from student) r 
pivot (max(school) for rank in ([1],[2],[3])) pv 

請注意,max實際上並沒有做任何事情。如果用min替換它,查詢將返回相同的結果。只是樞軸語法需要在這裏使用聚合函數。

+0

我是全新的sql服務器。我試圖找出什麼排名()(分區...)。 – Derick

+0

您可以運行內部查詢來查看它的功能。或閱讀有關它在這裏:[排名t-sql msdn](http://msdn.microsoft.com/en-us/library/ms176102.aspx) – gordy