使用临时表,并且直接写select语句实现,不要再update,可以写个用户定义函数和子查询。
关于游标,最好不要使用,但是就你的问题来看只能使用了。关注中

解决方案 »

  1.   

    这样的:
    产品表:(此表有很多条记录)
    产品编号  大类  小类  型号
    1001      手机  MOTO   V66
    1002      手机  MOTO   V70
    1003      手机  NOKIA  2100办事处表:(此表有很多条记录)
    办事处编号  办事处名称  办事处类别
    1             公司       
    2            第一营业厅   营业厅
    3            第二营业厅   营业厅入库表:(此表为公司入库情况表,一次入库操作写入一条记录)
    入库编号   产品编号   数量    日期
    1           1001       40     2004-8-18
    2           1002       60     2004-8-18
    3           1003       90     2004-8-18
    3           1001       20     2004-8-18出库表:(此表为公司对各办事处的出库情况,一次出库操作写入一条记录)
    出库编号  产品编号   数量   日期        出库单位(办事处编号)
    1          1001       30    2004-8-18    2
    2          1002       10    2004-8-18    3
    3          1002       20    2004-8-18    2库房表:(此表为公司及各办事处的库存情况表)
    ID    产品编号    数量    所属(即办事处编号)
    1     1001        30       1(公司) 
    2     1002        30       1
    3     1003        90       1
    4     1001        20       2
    5     1002        16       2
    6     1002        7        3销售表:(此表为各办事处销售情况,一次销售写入一条记录)
    编号    产品编号  价格  数量  销售单位   日期
    1       1001      1000    5    2         2004-8-18
    2       1002      800     4    2         2004-8-18
    3       1002      800     3    3         2004-8-18
    4       1001      1100    5    2         2004-8-18
    请注意这个地方:同一种产品,产生了两次不同的销售价格
      

  2.   

    最后要的报表格式:(假设2004-8-18日之前没有任何数据,现以2004-8-18的日报表为例)
    大类  小类  型号 初始数 入库 出库 库存  单价  第一营业厅  第二营业厅  合计
    手机  MOTO   V66    0    60   30   30   1000    5           0
    手机  MOTO   V66    0    --   --   --   1100    5           0
    手机  MOTO   V70    0    60   30   30   800     4           3
    手机  NOKIA  2100   0    90   0    90   ---     0           0
      

  3.   

    我现在的处理方法(没有解决同商品有两种以上价格的问题):
    1 建立一个游标=select 办事处名称 from 办事处表 where  办事处编号!=1
      然后 varchar(500) @SQL='create table test(大类,小类……,单价'
      然后操作游标 set @SQL=@SQL+游标值  ……循环
      exec (@sql)
    2 select 大类 小类 型号 from 产品表 把数据插入刚建立的sell表
    3 根据库房表等算出各种产品的 初始数  入库 出库 然后插入刚建立的sell表
    4 建立一个游标=select sum(数量),办事处编号 from 销售表 group by (办事处编号)
      操作游标将数据判断然后写入sell表
    5 计算出合计金额以上并没有解决如前面所说的同商品不同价的问题
      

  4.   

    -- 创建视图
    create view 汇总所有表 as
    select 大类,小类,型号,入库,出库,库存,价格,办事处名称 from 
    ( select 大类,小类,型号,入库,出库,库存,价格,销售单位 from 
     -- 得出BB表(产品编号,出库,入库,库存,价格,销售单位)
    (select mm.产品编号,出库,入库,库存,价格,mm.销售单位 from 
    (-- 出入库,库房表的联接(得出:出库,入库,库存)
    select kk.产品编号,出库,入库,数量+入库-出库 as 库存,所属 as 销售单位 from 
    (select 产品编号=(case when ii.产品编号 is null then jj.产品编号 else ii.产品编号 end),出库,入库 from (select 产品编号,sum(数量) as 出库 from 出库表 where day(日期)=day(getdate()) group by 产品编号) ii
    full outer join
    (select 产品编号,sum(数量) as 入库 from 入库表 where day(日期)=day(getdate()) group by 产品编号) jj on jj.产品编号=ii.产品编号) kk 
    left join 库房表 ll on kk.产品编号=ll.产品编号) mm full outer join
    (select sum(数量) as 销售数量,价格,产品编号,销售单位 from 销售表 group by 销售单位,产品编号,价格) nn on mm.产品编号=nn.产品编号 and mm.销售单位=nn.销售单位) BB
    left join 产品表 AA on AA.产品编号=BB.产品编号) cc left join 办事处表 dd on dd.办事处编号=cc.销售单位你认真看吧,亏我写了大半天,大概就这样了,还有一些细节步骤你自己实现了
      

  5.   

    TO 小明兄:
    小弟愚笨,看了半天,没太明白
    你能不能把你给的哪个视图说详细点,里面的kk啊ii是什么表啊?
    谢谢了!对,我也讨厌游标,更讨厌建表,慢死了!
      

  6.   

    楼上的都有道理,最好不要用游标。相同商品单价不同这方面不知可否采用加权平均法,如果可以的话那应该没有问题!查询方面不要建表后去update ,直接into 几个临时表,再关联查询,会很快的!
      

  7.   

    jj kk 什么的是表的别名啦,我上班实在没什么时间,你如果真的有实现困难的话,联系我的MSN:[email protected]
      

  8.   

    我想你先根据办事处表创建一个表,然后在根据一条aql 语名来取得数据。也许可在提高速度。试试看。
      

  9.   

    我没有MSN,也不会玩
    有其他联系方式吗?