while ( ($timestamp, $report_type, $data_name, $data_value) = $ora_sth->fetchrow_array) { $key=$timestamp . "," . $report_type; if ($data_name eq "minutes") {$data_value = $data_value * 1440}; if ($data_name eq "minutes") {$data_value = sprintf("%9.2f",$data_value)}; $timestamps{$timestamp}=1; push @reporttypes, $report_type; $cellvalue{$key} = $data_value; } foreach $headingkey (@headings) { $row = $row . $query->th($headingkey); } print $query->Tr($row); foreach $timestamp (sort keys %timestamps) { $row = $query->td($timestamp); foreach $headingkey (@headings) { if ($headingkey eq "Timestamp") {next;} $key=$timestamp . "," . $headingkey; $row = $row . $query->td($cellvalue{$key}); } print $query->Tr($row); }