データベースを効果的に使用していないようです。ここに、ある程度の前進を助ける考えがあります: シェルを使用して SQL を生成できます。
各クエリの先頭がどのようになるかはわかっています。
select a1,
したがって、いくつかのレポート SQL の作成を開始する必要があります。
Report_SQL="select a1, "
次に、ピボット レポート用に任意のサイズの列セットの SQL ステートメントのリストを取得する必要があります (MySQL では、他のデータベースでは||
連結が必要になります)。
select distinct concat('sum(case a2 when ', a2, ' then amount else null end) as "_', a2,'",')
from my_database_table
order by 1
;
これはシェル内にあるため、次のように簡単に変数に取り込むことができます。
SQL=" select distinct concat('sum(case a2 when ', a2, ' then amount else null end) as _', a2,',') "
SQL+=" from my_database_table "
SQL+=" order by 1 "
# You would have to define a runsql command for your database platform.
a2_columns=$(runsql "$SQL")
a2_columns
この時点で、変数の末尾に余分なコンマが追加されます。それは簡単に削除されます:
a2_columns=${a2_columns%,}
これらの変数を連結して、実際に必要と思われるレポート SQL を作成できます。
Report_SQL+="${a2_columns}"
Report_SQL+=" from my_database_table "
Report_SQL+=" group by 1"
Report_SQL+=" order by 1"
結果のレポート SQL は次のようになります。
select a1,
sum(case a2 when 1000 then amount else null end) as _1000,
sum(case a2 when 2000 then amount else null end) as _2000,
sum(case a2 when 3000 then amount else null end) as _3000
from my_database_table
group by 1
order by 1
;
レポート ヘッダーの書式設定は、読者の課題として残されています。:)