in reply to Hash of Hashes

Even though your question is already answered, here's a different approach.
my $hr_data = $dbh->selectall_hashref( "select course_id, course_name, course_sitting_id, course_sitting_date from courses", ["course_id", "course_sitting_id"]) or die $dbh->errstr;
This gets you the following structure:
{ '10' => { '1' => { course_id => '10', course_name => 'Programming 101', course_sitting_id => '1', course_sitting_date => '01-SEP-2011' }, '2' => { course_id => '10', course_name => 'Programming 101', course_sitting_id => '2', course_sitting_date => '20-SEP-2011' }, }, '20' => { '1' => { course_id => '20', course_name => 'Databases 101', course_sitting_id => '1', course_sitting_date => '03-SEP-2011' }, '2' => { course_id => '20', course_name => 'Databases 101', course_sitting_id => '2', course_sitting_date => '27-SEP-2011' }, }, };
From here you can mold the hashref to your preference.