SQL问题请教


我现在遇到一个问题,请教下大家应该怎么解决。

我通过查询一个表,得出一个视图。但现在这样的表有很多个,我的想法是怎么样自动的查询这些表,得到同一个视图。

表的名字是有规律的,比如 T1_1, T1_2, T1_3, T1_4, T1_5, T1_6, T1_7 ,且所有表的结构和列名是一样的。创建视图时运行以下的sql语句:


 SELECT DISTINCT 局向,COUNT(局向) AS 局向数量,sum(总费用) AS 总费用 FROM T1_1 GROUP BY 局向

现在需要说明的是:

  1. 每个表都很大,上百万级的级别,我想过把所有表加到一个表中再运行上述语句,但效率不太高
  2. 上述的sql会生成一个视图,我的目的是所有这些表的结果都在同一个视图中
  3. 这些表中可能会有重复项

sql db2

xiaoai 10 years, 2 months ago

你既然都考虑到了脚本,就应该从脚本下手,写一个存储过程来实现。
在PL/SQL 里面是可以使用Dynamic SQL来实现你这个需求。

通过循环来遍历表名,依次来拼接创建视图的sql(可以参照楼上的union方式),Dynamic SQL执行

不知道DB2有没有此类机制,只是一个建议

闲来无事求包养 answered 10 years, 2 months ago

表的个数是固定的吧,可以参考下面的语句


 select DISTINCT 局向,COUNT(局向) AS 局向数量,sum(总费用) AS 总费用
from (
    SELECT DISTINCT 局向,COUNT(局向) AS 局向数量,sum(总费用) AS 总费用 FROM T1_1 GROUP BY 局向
    union
    SELECT DISTINCT 局向,COUNT(局向) AS 局向数量,sum(总费用) AS 总费用 FROM T1_2 GROUP BY 局向
    union
    SELECT DISTINCT 局向,COUNT(局向) AS 局向数量,sum(总费用) AS 总费用 FROM T1_3 GROUP BY 局向
)

smooth answered 10 years, 2 months ago

Your Answer