【发布时间】:2013-01-05 20:04:12
【问题描述】:
我们每天从 200 个交通站点获取数据,所有站点都有不同的表名,例如 (KGM_000000000001_PVR)。所有站都具有相同的列排序和相同的列名。我们总是会收到不同愿望的报告,我们将站点与联合全部结合起来,如下例所示。一直以来,我们将它们与 union all 结合起来,这有点困难。有没有其他简单的方法来获得类似报告(使用循环、案例、for 等)。
事件
谢谢
报告代码示例:
SELECT count(class) from C2.KGM_000000000001_PVR WHERE class=9 and RECTIME BETWEEN TO_DATE('01.01.2012','DD.MM.YYYY') AND TO_DATE('01.01.2013','DD.MM.YYYY')
union all
SELECT count(class) from C2.KGM_000000000002_PVR WHERE class=9 and RECTIME BETWEEN TO_DATE('01.01.2012','DD.MM.YYYY') AND TO_DATE('01.01.2013','DD.MM.YYYY')
union all
SELECT count(class) from C2.KGM_000000000003_PVR WHERE class=9 and RECTIME BETWEEN TO_DATE('01.01.2012','DD.MM.YYYY') AND TO_DATE('01.01.2013','DD.MM.YYYY')
union all
.
.
.
SELECT count(class) from C2.KGM_000000000200_PVR WHERE class=9 and RECTIME BETWEEN TO_DATE('01.01.2012','DD.MM.YYYY') AND TO_DATE('01.01.2013','DD.MM.YYYY')
【问题讨论】:
-
您可以一次生成所有表的视图,然后使用该视图进行选择。至少缩短了每个报告所需的 SQL。
-
你能把它全部存储在一个带有站名字段的表中吗?这样您就不需要合并 200 个不同的表。
-
动态 SQL 是一个选项
-
为什么不规范化该表并只创建一个?
-
@Plouf!:但是您将节省的钱用于解决(损坏的)设计引起的问题。我想知道什么更便宜...