これまでのところ、SQLに関しては独学で学んでいますが、自分で教えることの問題は、修正をハックすることはよくありますが、目標を達成するためのベストプラクティスではない可能性があることです。次のコードは、これらのハックの1つです。
select breed, sum(mar_11) as mar_11, sum(apr_11) as apr_11
from (
select d.breed, d.qty as mar_11, 0 as apr_11
from dogs d
where d.entry_date between '01-MAR-11' and '31-MAR-11'
union all
select d.breed, 0 as mar_11, d.qty as apr_11
from dogs d
where d.entry_date between '01-APR-11' and '30-APR-11'
) t
group by breed;
上記のコードの達成された目標は、3月と4月の両方で生まれた犬の総数を示すフォーマットされたレポートを提供することです。これは、いくつかの期間を扱っている場合は素晴らしいですが、20〜30の異なる期間に移動すると、コードは面倒で反復的になります。
私が考案した2番目のハックは、レポートを動的にし、毎月再コーディングすることなく過去6か月を表示することです。これは、コマンドプロンプトを介して変数を渡すbashスクリプトとGNUDateを使用して実現しました。
(e.g.)
sqlplus64 ilove/dogs@dogville @myreport var1 var2 var3 var4
私の質問は次のとおりです。
1)SQLステートメントをより効率的にするために(つまり、日付を変更して同じコードを何度も繰り返さないようにするために)どのツールを使用できますか?
2)私が達成しようとしていることは、良い習慣と見なされていても(または、ピボットテーブルを介して後処理を行う必要があります)?
3)bashやGNU Dateを必要とせずに、SQLステートメントを動的にするにはどうすればよいですか?