有这样一个视图如下,我把氟石膏、脱硫石膏、外加剂等材料表的“shuifen”列合成在一个表中。但经常添加新的材料表,我怎样做才能让新加的材料表的“shuifen”列自动统计进入这个视图呢?
CREATE VIEW dbo.shuzihua
AS
SELECT  view_a.MaterialName, view_a.NetWeight, view_a.OutTime, 
      bbb.shuifen
FROM (SELECT weighid, [shuifen]
        FROM [氟石膏]
        WHERE isdel = 0
        UNION ALL
        SELECT weighid, [shuifen]
        FROM [脱硫石膏]
        WHERE isdel = 0
        UNION ALL
        SELECT weighid, [shuifen]
        FROM [外加剂]
        WHERE isdel = 0
) bbb INNER JOIN
           view_a ON 
      view_a.id = bbb.weighid

解决方案 »

  1.   

    氟石膏、脱硫石膏、外加剂的确是三张表
    每张表中存放各自的化验结果数据,他们是根据view_a表的'materialid'列统一起来的
      

  2.   

    可以通过一个create table的DDL触发器来实现,
    但不太好。
    还是加一个材料总表来记录所有材料比较好。
      

  3.   

    确切的说应该是氟石膏、脱硫石膏、外加剂表中的每条记录都有一个weighid,也就是相应材料每一车的ID号。view_a中有多有车的ID号。根据这个对应。如下
    氟石膏
    id     shuifen 
    ----------------
    1        1.6
    3        2.4
    脱硫石膏
    id     shifen
    -----------------
    2       3.7
    5       2.6
    外加剂
    id     shuifen
    -----------------
    4       1.9
    6       3.5view_a
    id    MaterialName, NetWeight
    ----------------------------------
    1         氟石膏        13.5         
    2        脱硫石膏        56.3
    3        氟石膏          45.2
    4       外加剂           23.6
    5       脱硫石膏         25.8
    6        外加剂          29.8
      

  4.   

    或者建一个表,里面存放这些材料的表名
    例如:
    -----------
    表名 material_name
    氟石膏
    脱硫石膏
    外加剂
    ...以后添加表的时候也把相应的表名填写在这里,视图取数据的时候用动态语句来这张表里取表名。最好的方法是建立一个明细表,主表放材料名,细表放这些材料的数据材料主表(id1,材料名)
    材料细表(id2,id1,数据1,数据2...)id1在细表中是外键
      

  5.   

    材料主表(id1,材料名)
    ----------------------
    1,氟石膏
    2,脱硫石膏
    3,外加剂
    材料细表(id2,id1,NetWeight )
    ---------------------------
    1,1,13.5
    2,1,45.2
    3,2,56.3
    4,2,25.8
    5,4, 23.6 
    6,4, 29.8      
      

  6.   

    可是没有material表,能自动收集表名到一个表中?
    然后再如何建立一个视图,实现“水分”的统计?
      

  7.   

    用DDL触发器可以收集新建的表名
      

  8.   

    DDl触发器是sql2005的吧
    我的是aql2000……
      

  9.   

    动态语句方法
    declare my_cursor cursor for
    select table_name from all_table--收集表名declare @table_name nvarchar(50)
    declare @sql nvarchar(4000)
    set @sql=''
    set @table_name =''open my_cursor
    fetch next from my_cursor
    into @table_name
    while @@fetch_status =0
    begin
    set @sql = @sql + 'select id as weighid, shuifen from '+@table_name + ' union all 'fetch next from my_cursor
    into @table_name
    endclose my_cursor
    deallocate my_cursordeclare @sql1 nvarchar(4000)
    set @sql1 =substring(@sql,1,len(@sql)-10)
    exec (@sql1)