如果你仅仅想生成这样一张报表,你的表结构可以修改为(测试点,测试时间,测试数据),这样你只要使用insert into  select 语句把所有测试点的数据放入一个表就行了。再用sql语句生成这样一个报表应该没有什么问题吧!如果测试点的数据不是远程数据,就不需要倒数据了。直接写入这个表就行了。

解决方案 »

  1.   

    呵呵,遗憾!我不是要生成报表,而是向这样的一个结构倒库。测试点的数据就是远程数据。
    我的数据来源就是(测试时间,测试数据)——每张表是一个测试点的数据,和bill9提出的差不多,呵呵!而且最终的目的表结构不是我们可以修改的,而是实际操作中对方提出的——很郁闷!
    高手们提出些思路啊,谢谢了!
      

  2.   

    没必要那么麻烦,假设你的表是t1~t999,时间点是time_id,每个测试数据是value,每个表的时间点都是完全相同。要插入的表是T。
    insert into T select t1.time_id 时间点,t1.value,t2.value.... from t1,t2...t999
    where t1.time_id=t2.time_id
    and t1.time_id=t3.time_id
    ...
    and t1.time_id=t999.time_id;
      

  3.   

    TO nowait(独行天涯路)你提出的方法我回去会试一下。但是效率是不是会提高,还要看实验结果。目前的每条纪录,在有了时间点作纪录标识后,进行后面的更新,速度大约11秒一条——如果进行你提出的方法,我仍然不可避免的进行999次查询(这个当然不可避免),方法差别在于你的方法是一次插入,把所有的纪录混合到了一次执行,where语句很长;我把where分开执行。下周我会把实验结果写出来的。祝大家周末愉快!——同时期待新的解决思路的提供,分不够可以加:)独行天涯路,U will never walk alone!
      

  4.   

    本周一,周二进行了一下测试,发现主要的时间消耗,花在select 测点的VALUE,其他的步骤基本都没有花时间(其余拼字符串、update加在一起没有超过一秒)。nowait(独行天涯路) 为我提供的办法也计算了一下,基本花费的时间差不多,因为我不可避免的要从999个实际测点取出实际的VALUE。现在客户提出新的方法——对目前已经由时间点标识的纪录进行纵向更新,即每次更新所有同一测点的所有纪录——按照我目前的理解,觉得狂汗……目前的纪录数已经达到数万,我如果纵向按照测点更新,那么一次需要更新数万条纪录,也就是执行数万次 update;客户觉得是一次 update,即对列操作,实在没有接触过。
    等测试完以后,再来详述。
      

  5.   


    update table1 set table1.a1=(select table2.value1
    from table2
    where table1.datatime=table2.datatime)
    table2可以是调度的表,也可以是倒过来的临时表。由于是inner join,建议是倒过来的表。两个表的time,table2.pid要有索引。 倒表一句话,更新一句话,应该比较简单。
      

  6.   

    经过周末的倒库测试,发现 solidpanther(╃╄╃我爱机器猫╄╃╄) 的方法很高效。
    原来执行估算时间共需两月的 现在一天多就可以了  真是高效啊数据最终的倒入表A 结构如下:时间点        测点1 测点2 测点3 测点4 …… 测点999
    年月日时分
    年月日时分
    年月日时分
    年月日时分
    ……具体的方法就是  update  测点1  select value from  测点1所对应的实际数据表  where  A.时间点
    = 测点1所对应的实际数据表.时间点看上去是更新了几万次  但是效率的却提高了
    我感觉是因为从一个表取数据,select value from  相同的地方,所以就比原来从999个不同的表取值快些吧……  内部的运行机制不适很清楚,回头一定要好好查查
      

  7.   

    结贴了  
    感谢 独行天涯路 和 solidpanther(╃╄╃我爱机器猫╄╃╄)  的支持、指点!