到目前为止,当涉及到任何 sql 时,我都是自学的,自学的问题在于,虽然您经常可以破解修复程序,但这可能不是实现目标的最佳实践。以下代码是这些黑客之一:
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;
上述代码的目标是提供一个格式化的报告,显示三月和四月出生的狗总数。当我们处理几个时间段时这很好,但是当您进入 20-30 个不同的时间段时,代码变得乏味和重复。
我设计的第二个技巧是使报告动态化并显示前六个月,而无需每个月重新编码。我已经使用 bash 脚本和 GNU Date 完成了这项工作,它们通过命令提示符传递变量。
(e.g.)
sqlplus64 ilove/dogs@dogville @myreport var1 var2 var3 var4
我的问题如下:
1)我可以使用什么工具来提高我的sql语句的效率(即通过更改日期减少重复相同的代码)?
2)我想要实现的目标是不是被认为是好的做法(或者我应该通过数据透视表进行后处理)?
3) 如何在不需要 bash 和 GNU Date 的情况下使我的 sql 语句动态化?