Can you post the code of your loop? This probably doesn't answer your question, but I don't understand exactly why you'd want to use hashes, if you can just pull the data right out of the database. If you want to do that (I assume you're using DBI), try something like this:
...
$sth->execute;
print "<table>";
while (my @row = $sth->fetcharray) {
print <<END_OF_TEXT;
<tr><td>$row[0], $row[1]</td><td>$row[1]</td></tr>
<tr><td colspan="2">$row[3]</td></tr>
END_OF_TEXT
}
print "</table>";
...where @row contains a row of your data. Of course if you just have a document delimited by :'s, you may just want to check out the Text::CSV_XS module.