0

次のように、それぞれの月の列にデータを表示する年末レポートが必要なクライアントがいます。

Income               Jan    Feb    Mar   ..... Dec
   Rent              10.00  10.00  10.00       10.00

Expenses
   Landscape         5.00   3.00   2.00        5.00

Net Income           5.00   7.00   8.00        5.00

すべてのトランザクションデータは、このように1つのテーブルに保存されます

Create Table transaction(
   id int,
   date DATE,
   amount DECIMAL 10,2,
   account_type INT)

どうやって始めたらいいのかよくわかりません。レポートデザイナーとしてiReportを使用し、データベースとしてmysqlを使用しています。SQLを使用してこのようなものを取得する効率的な方法はありますか?このようなことSELECT date FROM transaction WHERE date between 1-01-2012 and 12-31-2012をして結果を出し、iReportを使用して、クライアントが望むようにデータを列に分割する方がよいでしょうか。

最善のアプローチとは何か、そしてこれをどのように達成できるのか疑問に思っています。

あなたの助けとアイデアをありがとう。

4

3 に答える 3

0

私があなたの質問を正しく理解したなら、このコードはあなたを助けるかもしれません。

 SELECT (DATE_FORMAT(date_col,'%m/%d/%Y')) as datecol  FROM transaction ;

これがあなたが探しているものではない場合は、私たちに知らせてください。幸運を。

于 2012-12-08T00:45:20.787 に答える
0

ピボット...または...のいずれかを使用して、SQLでその出力を作成できます。

create table tmp ([date] date, amount decimal(10,2), accounttype int)

insert into tmp values ('1/1/2012', 10, 1)
insert into tmp values ('2/1/2012', 10, 1)
insert into tmp values ('3/1/2012', 10, 1)

select
  'RENT' title,
  sum(case when [date] = '1/1/2012' then amount else null end) Jan,
  sum(case when [date] = '2/1/2012' then amount else null end) Feb
from tmp
where accounttype = 1

ああ、「[date] = '1/1/2012'」を日付部分関数に置き換えて、月を判別する必要があります。

そこに他の経費タイプを追加する必要がある場合は、「union」を使用して同じデータセットに追加します。経費が負の値であることを確認してください。合計は、jasper変数を使用して計算する必要があります。

于 2012-12-11T18:06:28.047 に答える
0

SmitとSam、返信ありがとうございます。最終的には両方のSQL例の一部を使用しましたが、最終的にはそれらの例を使用して、最終的にiReportにレポートを出力しました。月ごとに列を作成し、必要に応じて月(日付)を使用して月を区切る必要がありました。したがって、レポートが実行されると、各トランザクションはそれが属する月の列の下に配置されます。

于 2012-12-18T16:46:17.520 に答える