2016-02-12 38 views
0

我對我自己的個人項目卡住了一個簡單的SQL Server事情。SQL Server組和反向

我有一個表X:

| Name  | Lecture  | Points  | 
|:-----------|------------:|:------------:| 
| John  |  Math |  2  
| John  |  Bio |  5  
| Tom  |  Physics |  8  
| Tom  |  Math |  2  
| Bob  |  Physics |  1  
| Bob  |  Bio |  6 

我的名字,並把所有的點我一個排的每個人要組:

| Name  | Math | Bio | Physics | 
|:-----------|------:|:----:|:-------:| 
| John  | 2 | 5 | NULL  
| Tom  | 2 | NULL |  8  
| Bob  | NULL | 6 |  1  

我試着這樣做:

SELECT Name, ? AS Math, ? AS Bio, ? AS Physics 
FROM X 
GROUP BY Name 

但我不知道該放什麼而不是「?」。我怎樣才能做到這一點 ?

+1

你需要做的無論是PIVOT或交叉表(也稱爲條件聚合)。 –

+0

是的,PIVOT會做得很好。對於簡單的事例,如上例所示,它將非常簡單直接。但是,如果您的透視列未知 - 您有藝術,西班牙,PE等 - 並且可以創建更多,您將需要查看創建動態PIVOT。這兩個主題都在堆棧交換中很好地覆蓋 –

回答

0

你需要一個數據透視表,你需要知道的值,除非你想使用動態SQL(不推薦,除非絕對必要):

SELECT Name, 
    ISNULL([Math], 0) as [Math], 
    ISNULL([Bio], 0) as [Bio], 
    ISNULL([Physics], 0) as [Physics] 
FROM 
(
    SELECT Name, Lecture, SUM(Points) 
    FROM Table X 
    GROUP BY Name, Lecture 
) as t1 
PIVOT (SUM([Points]) for [Lecture] in ([Math], [Bio], [Physics])) as t2