关于查询引用单列多行值的问题 本帖最后由 u013985466 于 2014-04-26 22:27:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 表1 中全部是项目1的数据吗? 表2 的列eva_item 与表1 有什么关联没? 可以这样理解:表1是原始数据,表2根据表1的数据产生运算结果。两表之间的关联如下:表2的eva_item 对应的eva_score是需要计算的对象,而eva_score=(指标1实际值+指标2实际值)/指标3实际值,这里,需要引用表1对应年、月、部门以及对应指标的实际值 举例: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多个指标由行变列。 举例: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多个指标,稍微要多写一点代码。 那就写子查询把,比如:select (select SUM(xxx) from 表 where index_name in ('指标1','指标2')) /select SUM(xxx) from 表 where index_name in ('指标3'))from tb yupeigu兄提供的也是好方法。但是,公式中可能出现10个类别的指标运算,若全部采用子查询,则维护代码会变得困难。这样的思路请评析:①建立临时表或者用公用表达式CTE将要运算的指标查询出来,进行行转列,赋予其列名;②绩效项目分数计算公式中,直接引用临时表或者公用表达式中的列名;考虑到公用表达式存在过滤到重复值的问题,也许通过子查询建立临时表是较好的思路。 举例: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个指标,就对这三个指标进行行转列。 SQL Server 2000桌面引擎(MSDE 2000)。这是一个可以打包到你的安装程序里,你百度一下,查查资料看看怎么打进去,都是比简单操作。 您这句话指代的是什么?我阐述的问题可能与是否有数据库引擎没有关系,我想了解的是更优秀的算法。对不起,我回复错帖子了,向你表示一下歉意。这位兄弟客气了,欢迎来本帖,尤其欢迎贡献您的idea。 SQLSERVER 如何获取一个串的长度? sql 存储过程变量取值的问题 请教一个触发器问题 isql输出格式问题,100分 参数数据类型 text 对于 replace 函数的参数 1 无效 跪求各位大虾:如何写多表查询的语句 SQL2000排序问题 如何在solaris下安装oracle8i?我想要详细步骤!重分相求! 高手请进:SQL SERVER数据库连接和线程问题 新人求大神指点下。。。 表分区 创建分区方案,提示文件组 对象名无效,求解释
表2 的列eva_item 与表1 有什么关联没?
可以这样理解:表1是原始数据,表2根据表1的数据产生运算结果。
两表之间的关联如下:表2的eva_item 对应的eva_score是需要计算的对象,而eva_score=(指标1实际值+指标2实际值)/指标3实际值,这里,需要引用表1对应年、月、部门以及对应指标的实际值
举例: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多个指标由行变列。
举例: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多个指标,稍微要多写一点代码。
那就写子查询把,比如:
select
(select SUM(xxx) from 表 where index_name in ('指标1','指标2')) /
select SUM(xxx) from 表 where index_name in ('指标3'))
from tb
但是,公式中可能出现10个类别的指标运算,若全部采用子查询,则维护代码会变得困难。这样的思路请评析:
①建立临时表或者用公用表达式CTE将要运算的指标查询出来,进行行转列,赋予其列名;
②绩效项目分数计算公式中,直接引用临时表或者公用表达式中的列名;
考虑到公用表达式存在过滤到重复值的问题,也许通过子查询建立临时表是较好的思路。
举例: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个指标,就对这三个指标进行行转列。
这是一个可以打包到你的安装程序里,你百度一下,查查资料看看怎么打进去,都是比简单操作。
我阐述的问题可能与是否有数据库引擎没有关系,我想了解的是更优秀的算法。对不起,我回复错帖子了,向你表示一下歉意。
这位兄弟客气了,欢迎来本帖,尤其欢迎贡献您的idea。