Question : Roll Up/ Cube in Oracle 10g

I'm using Oracle 10g as my database.

Suppose I have a table that has data:

ID SEMESTER    SUBJECT        MARKS

9      4       Maths           50
9      4       Science     45
9      4       English     42
10      5       Maths     56      
10      5       History    23        

To now the output should look like this

ID SEMESTER       SUBJECT     MARKS
9      4                Maths                50
                       Science         45
                         English           42
                           Total           137
10      5             Maths               56
                     History            23
                      Total               79      

I think I could possible achieve this with cube or roll up
Can anybody of you please suggest me a possible query that would help me achieve this feat

Answer : Roll Up/ Cube in Oracle 10g

This should do:

select case when rn = 1 then id else null end id,
case when rn = 1 then semester else null end semester, subject, marks
from (
select row_number() over(partition by id, semester order by id, semester) rn,
case when grouping_id(id, semester, subject) <> 0 then null else id end id ,
case when grouping_id(id, semester, subject) <> 0 then null else semester end semester ,
case when grouping_id(id, semester, subject) = 1 then 'Total' else subject end subject,
sum(marks) marks
from a1
group by grouping sets ((id, semester, subject), (id, semester)) )
/
Random Solutions  
 
programming4us programming4us