本帖最后由 u013985466 于 2014-04-26 22:27:35 编辑

解决方案 »

  1.   

    表1 中全部是项目1的数据吗? 
    表2 的列eva_item 与表1 有什么关联没?
      

  2.   


    可以这样理解:表1是原始数据,表2根据表1的数据产生运算结果。
    两表之间的关联如下:表2的eva_item 对应的eva_score是需要计算的对象,而eva_score=(指标1实际值+指标2实际值)/指标3实际值,这里,需要引用表1对应年、月、部门以及对应指标的实际值
      

  3.   


    举例:A部门2014年4月的项目分数eva_score 为:=(指标1实际值+指标2实际值)/指标3实际值,这里需要引用表1在2014年4月,关于A部门的指标1、指标2和指标3的数据,即(0.01+0.133)/0.458=0.312227074可见,业务逻辑相当简单,困难在于如何查询引用单列多行值的问题,实在没有办法,只有进行行转列处理了,将表1的100多个指标由行变列。
      

  4.   


    举例:A部门2014年4月的项目分数eva_score 为:=(指标1实际值+指标2实际值)/指标3实际值,这里需要引用表1在2014年4月,关于A部门的指标1、指标2和指标3的数据,即(0.01+0.133)/0.458=0.312227074可见,业务逻辑相当简单,困难在于如何查询引用单列多行值的问题,实在没有办法,只有进行行转列处理了,将表1的100多个指标由行变列。行专列确实是一个好办法,不过,100多个指标,稍微要多写一点代码。
      

  5.   


    那就写子查询把,比如:
    select 
    (select SUM(xxx) from 表 where index_name in ('指标1','指标2')) /
    select SUM(xxx) from 表 where index_name in ('指标3'))
    from tb
      

  6.   

    yupeigu兄提供的也是好方法。
    但是,公式中可能出现10个类别的指标运算,若全部采用子查询,则维护代码会变得困难。这样的思路请评析:
    ①建立临时表或者用公用表达式CTE将要运算的指标查询出来,进行行转列,赋予其列名;
    ②绩效项目分数计算公式中,直接引用临时表或者公用表达式中的列名;
    考虑到公用表达式存在过滤到重复值的问题,也许通过子查询建立临时表是较好的思路。
      

  7.   


    举例:A部门2014年4月的项目分数eva_score 为:=(指标1实际值+指标2实际值)/指标3实际值,这里需要引用表1在2014年4月,关于A部门的指标1、指标2和指标3的数据,即(0.01+0.133)/0.458=0.312227074可见,业务逻辑相当简单,困难在于如何查询引用单列多行值的问题,实在没有办法,只有进行行转列处理了,将表1的100多个指标由行变列。行专列确实是一个好办法,不过,100多个指标,稍微要多写一点代码。需要说明的是,并不需要对表1中的100多个指标都进行行转列,只是在计算表2的项目分数eva_score ,若需要表1中的3个指标,就对这三个指标进行行转列。
      

  8.   

    SQL Server 2000桌面引擎(MSDE 2000)。
    这是一个可以打包到你的安装程序里,你百度一下,查查资料看看怎么打进去,都是比简单操作。
      

  9.   

    您这句话指代的是什么?
    我阐述的问题可能与是否有数据库引擎没有关系,我想了解的是更优秀的算法。对不起,我回复错帖子了,向你表示一下歉意。
    这位兄弟客气了,欢迎来本帖,尤其欢迎贡献您的idea。