次のようにSQLで作成された「トランザクション」テーブルがあります。
TranID Date AccNum Type Amount ChequeNo DDNo
657520 02-07-1999 0181432 Debit 16000 465774
657524 02-07-1999 0181432 Debit 13000 569086
657538 09-07-1999 0181432 Credit 11000
657548 18-07-1999 0181432 Credit 15500
657519 02-07-1999 0181432 Debit 12000
657523 02-07-1999 0181432 Credit 11000
657529 03-07-1999 0181433 Debit 15000 466777
657539 10-07-1999 0181433 Credit 10000
657541 11-07-1999 0181433 Debit 12000
657525 03-07-1999 0181433 Debit 15000 569999
657533 05-07-1999 0181433 Credit 12500
問題は次のとおりです。トランザクションテーブルからデータをクエリし、小切手、dd、および各アカウントの現金から引き落とされる合計金額を計算し、結果をスプレッドシートに保存します。私のスクリプトは次のようなものです。
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Spreadsheet::WriteExcel;
my $dbh = DBI->connect('dbi:mysql:database:3306','prithvi','prithvi') or die $dbh->errstr;
my $sth = $dbh->prepare("SELECT `AccNum`,`Type`,`Amount`,`ChequeNo`,`DDNo` FROM `transaction`");
$sth->execute or die $sth->errstr;
my $workbook = Spreadsheet::WriteExcel->new('query_result.xls');
my $worksheet = $workbook->add_worksheet();
my $row = 0;
my $col = 0;
my %h;
$worksheet->write_row($row++,$col,['Account Number','Cheque Debit','DD Debit','Cash Debit']);
while(my @data = $sth->fetchrow_array)
{
next unless($data[1] eq 'Debit');
my $result = $data[3] ? "ChequeNo" : $data[4] ? "DDNo" : "Cash";
$h{$data[0]}{$result} += $data[2];
$worksheet->write_row($row++,$col,\@data);
}
$sth->finish;
$dbh->disconnect;
適切な出力が得られません。どこが間違っているのですか?助けてください。前もって感謝します。この質問に対する答えはありません。つまり、主に結果をスプレッドシートに保存します。答える前にこれを閉じないでください。皆様からのご要望をお待ちしております。