我们每天从200个交通站获取数据,所有站点都有不同的表名,如(KGM_000000000001_PVR)。所有工作站都具有相同的列排序和相同的列名称。总是我们得到不同愿望的报告,我们将工作站与工会全部结合起来,如下例所示。我们一直将它们与union all结合起来,这有点难。有没有其他简单的方法来获得这样的报告(使用循环,案例,等等)。
Levent
由于
报告代码示例:
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')
答案 0 :(得分:3)
您可能希望在所有这些表上创建一个视图,其中伪柱“SOURCE”显示表名。然后,您的客户端代码可以使用您喜欢的“SOURCE”列中的任何选项查询这一个视图。
CREATE VIEW KGM_ALL AS
SELECT 'KGM_000000000001_PVR' AS SOURCE, * FROM C2.KGM_000000000001_PVR
UNION ALL
SELECT 'KGM_000000000002_PVR' AS SOURCE, * FROM C2.KGM_000000000002_PVR
....
SELECT * from KGM_ALL where SOURCE in ('KGM_000000000001_PVR', ...)
正如@Marlin所说,不要忘记在源代码上创建索引以及您通常选择的其他列。
答案 1 :(得分:0)
每个表上的字段(类,RECTIME)上的索引会减少时间。请确保按指定的顺序在一个索引中包含这两个字段。
答案 2 :(得分:0)
也许你可以使用动态SQL:
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm
然后你应该能够通过连接它们的名称来迭代你的表(而不是使用where子句中的数字),如下所示: