2015-12-30 35 views
0

使用查詢我有這樣的一個表:在反規範化甲骨文

STU_NAME SUBJECT MARKS 
--------- --------- ------ 
1   ENGLISH 90 
1   TAMIL  80 
1   MATHS  70 
2   MATHS  70 
2   TAMIL  80 
2   ENGLISH 95 

而且結果應該是象下面這樣:

STU_NAME MATHS_MARK ENGLISH_MARK TAMIL_MARK TOTAL_MARKS 
--------- ----------- ------------ ----------- ------------- 
1   70   90   80   240 
2   70   95   80   245 

我們可以用一個查詢實現這一目標?

回答

0

我得到了同樣使用旋轉功能,

SELECT * 
FROM (SELECT * 
     FROM x) 
PIVOT (MAX(marks) FOR (SUBJECT) IN ('ENGLISH', 'MATHS', 'TAMIL')); 

但是,我依然面臨着一些問題。

  1. 是否可以在使用PIVOT時獲得總和(標記)。
  2. 在兩種情況下,都會在不提及每個主題的情況下獲得各自的標記(當我們知道主題是什麼時)。
+0

如果你想'sum(marks)',然後使用條件聚合(儘管你也可以使用'pivot'來完成)。 –

4

我發現,最簡單的方法是使用有條件聚集:

select stu_name, 
     max(case when subject = 'MATHS' then Marks end) as Maths, 
     max(case when subject = 'ENGLISH' then Marks end) as English, 
     max(case when subject = 'TAMIL' then Marks end) as Tamil, 
     sum(Marks) as Total 
from t 
group by stu_name; 
+0

太棒了,CUD U只是打電話給我,它是如何選取各自的主題標記。 – Vicky

+0

@Vicky,你忘了'請'或'謝謝''魔術字 –

+0

何!非常感謝:) – Vicky