每天建一张表形式如下:
第一天:
名称       上次数       本次数          差值
a            1            2               1
b            3            4               1
c            5            8               3
第二天: 
名称       上次数       本次数          差值
a            2            4              2
b            4            6              2
c            8           10              2
现在要在用户任意给的一个时间段内把这段时间内的所有表中的a.b.c所对应的差值求出来.
形式如下:
名称             差值和
a                 3 (1+2)
b                 3 (1+2)
c                 5 (3+2)各位高手请多多指教,给100分.请详细一点儿,还给一封感谢信.

解决方案 »

  1.   

    不过还是可以查的:
    SQL:Select 名称,sum(差值) as 差值和
    from 
    (
      Select 名称,差值 from 表一
      union all 
      Select 名称,差值 from 表二
      union all 
      Select 名称,差值 from 表三
      ...
    ) aa
      

  2.   

    楼上的再加  group by 差值
      

  3.   

    Agree to  txlicenhe(马可)
    如果日期不定,则需要在程序中确定这些表的名称,并动态地生成查询的SQL语句。
      

  4.   

    同意马可的方法,如果你硬是要建立多个表的情况下,
    表名建立规范一点,如:DB20031112,DB20031113等
      

  5.   

    看楼主的意思,表名应该是有规律的,不然他也不可能知道要统计那几个表。txlicenhe(马可)兄已经把精华说了,不过如果要实现你的那个格式 3(1+2)好像比较麻烦
      

  6.   

    如果名称有多个,可以增加,表应建成如下格式:
    日期 名称 次数如果名称只有a,b,c等固定的几类,可建成如下格式,简化运算:
    日期 次数_a 次数_b 次数_c如此建表,可彻底避免冗余数据
      

  7.   

    同意楼上几位说的用union all 就行不过强烈建议修改表的结构
      

  8.   

    连续一段时间的差值和等最一天减最前一天的再前一天值(dt_Min,dt_Max),即
    a 3(4-1)
    b 3(6-3)
    c 5(10-5)Demo(SQL Server):CREATE TABLE aaa 
    (
        dt datetime     NULL,
        nm varchar(20)  NULL,
        tm numeric(9,0) NULL
    )go
    INSERT INTO aaa ( dt, nm, tm ) 
     VALUES ( '05/01/2000', 'a', 1 ) 
    go
    INSERT INTO aaa ( dt, nm, tm ) 
     VALUES ( '05/01/2000', 'b', 3 ) 
    go
    INSERT INTO aaa ( dt, nm, tm ) 
     VALUES ( '05/01/2000', 'c', 5 ) 
    go
    INSERT INTO aaa ( dt, nm, tm ) 
     VALUES ( '05/02/2000', 'a', 2 ) 
    go
    INSERT INTO aaa ( dt, nm, tm ) 
     VALUES ( '05/02/2000', 'b', 4 ) 
    go
    INSERT INTO aaa ( dt, nm, tm ) 
     VALUES ( '05/02/2000', 'c', 8 ) 
    go
    INSERT INTO aaa ( dt, nm, tm ) 
     VALUES ( '05/03/2000', 'a', 4 ) 
    go
    INSERT INTO aaa ( dt, nm, tm ) 
     VALUES ( '05/03/2000', 'b', 6 ) 
    go
    INSERT INTO aaa ( dt, nm, tm ) 
     VALUES ( '05/03/2000', 'c', 10 ) 
    goselect a.nm, sum(a.tm-b.tm) as tms from
      (select nm,tm from aaa where dt='2000-5-3') as a,
      (select nm,tm from aaa where dt='2000-5-1') as b
     where a.nm=b.nm
     group by a.nm
      

  9.   

    写循环构造语句
    select 名称,(z.差值1+z.差值2+......) as 合计差值 from(  
      Select 名称,差值 as 差值1 from 表一 a
      left join
      Select 名称,差值 as 差值2 from 表二 b
      on a.名称=b.名称
      left join
      Select 名称,差值 as 差值3 from 表二 c
      on a.名称=c.名称
      ......)z