select 
(select count('y') from tab1)
+(select count('y') from tab2)
+(select count('y') from tab3)
+ ……
from 
dual;

解决方案 »

  1.   

    是这样吗?
    select count(*) from ( select 属性 from t1 union all select 属性 from t2... union all select 属性 from tn ) where 属性 = '属性值'
      

  2.   

    不好意思,写错了
    select count(*) from ( select 属性 from t1 union all select 属性 from t2... union all select 属性 from tn )
      

  3.   

    是这个意思,但我要是有100-200个表,我不会要写100-200个select吧
        我就是想问有没有不用写那么多,直接统计多表数据的
      

  4.   

    DECLARE 
    v_sql   VARCHAR2(4000);
    v_count INTEGER;
    v_sum   INTEGER;
    v_cnt   INTEGER;
    TYPE table_type IS TABLE OF User_All_Tables%ROWTYPE INDEX BY BINARY_INTEGER;
    v_table table_type;
    CURSOR cour IS SELECT *   FROM  User_All_Tables WHERE table_name LIKE 'FJ%';
    BEGIN    
        v_sum:=0;v_count:=0;
        OPEN cour;
        FETCH cour BULK COLLECT INTO v_table;
        CLOSE cour;
        
        FOR i IN 1..v_table.COUNT LOOP
        v_sql:='SELECT COUNT(*) FROM '||v_table(i).table_name;
        EXECUTE IMMEDIATE v_sql INTO v_count;
        
        v_sum:=v_sum+v_count;
        END LOOP;    
        dbms_output.put_line(v_sum);
        
    END;
      

  5.   

    你把
     LIKE 'FJ%'
    去掉就好了
    刚才测试的忘了去掉了
    没有问题,直接执行就行了
      

  6.   

    我猜楼主系统肯定是产生了一些类似于每月记录单独存放到一个表里的现象吧,如果是这样的话这些表的名字应该都用年份月份的数字作为表名一部分的了,这种情况你只能写循环挨个统计每个表了
    隐患一开始设计数据库的时候就埋下了,现在的库表结构没有更好的办法了;除非建立一个新的表,结构与那些相同,只是要增加一个相应的月份作为区分冰用来当作主键,才可以实现一个sql就能统计长期历史数据。相信楼主这次遇到了这个问题,如果以后类似的数据挖掘分析要求还很多,不改库表结构还是个麻烦