[易飞]EXP(SUM(LOG(字段)))的实践
来源:互联网 发布:方媛开的淘宝店铺 编辑:程序博客网 时间:2024/06/06 00:37
在写到一半代码的时候,需要统计指定行的乘积。想到SQL中有
EXP(SUM(LOG(字段)))的新函数试试。完全代码如下
-- ============================================= -- Author: <David Gong> -- Create date: <2015-9-11> -- Description: <统计COB品质状况表> -- ============================================= ALTER Proc UP_Proc_COB( @year as char(4))asbegincreate table #tmpCOB( 项目 varchar(20), 月份 varchar(20), 百分比 decimal(8,4) default (0));--declare @year as char(4)--set @year='2015'declare @yearmonth as char(6)declare @i intset @i=1declare @month char(2)while @i<=12BEGIN set @month=right(@i+100,2) set @yearmonth =@year+right(@i+100,2) if(@yearmonth<=CONVERT(char(6),getdate(),112)) begin --统计当月绑定合格率 insert into #tmpCOB(项目,月份,百分比) select '1.绑定合格率' as 项目, @month 月份, cast(round(sum(测试数量-不良数量)*1.0/sum(测试数量),4) as numeric(8,4)) 合格率 from 制程COB绑测 where CONVERT(char(6),日期,112)=@yearmonth --统计当月外观合格率 insert into #tmpCOB(项目,月份,百分比) select '2.外观合格率' as 项目, @month 月份, cast(round(sum(测试数量-不良数量)*1.0/sum(测试数量),4) as numeric(8,4)) 合格率 from 制程COB外观 where CONVERT(char(6),日期,112)=@yearmonth --统计成测合格率 insert into #tmpCOB(项目,月份,百分比) select '3.终测合格率' as 项目, @month 月份, cast(round(sum(测试数量-不良数量)*1.0/sum(测试数量),4) as numeric(8,4)) 合格率 from 制程COB成测 where CONVERT(char(6),日期,112)=@yearmonth --统计FQC合格率 insert into #tmpCOB(项目,月份,百分比) select '4.FQC合格率' as 项目, @month 月份, cast(round(sum(检验数量-不合格数量)*1.0/sum(检验数量),4) as numeric(8,4)) 合格率 from 制程FQC_COB_检验 where CONVERT(char(6),检验日期,112)=@yearmonth end set @i=@i+1ENDselect * into #COBfrom #tmpCOB pivot(max(百分比) for 月份 in ([01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12])) aselect 项目,[01] 一月,[02] 二月,[03] 三月,[04] 四月,[05] 五月,[06] 六月,[07] 七月,[08] 八月,[09] 九月,[10] 十月,[11] 十一月,[12] 十二月FROM #COB union all---处理指定行的列乘积计算/*--方法一: CASE WHEN 行转列 之后PIVOT函数指定列select * from (select '6.制程一次通过率' as 项目,月份,ROUND(sum(绑定百分比)*sum(外观百分比)*sum(终测百分比),4) as 百分比 from(select 项目,月份,CASE WHEN 项目='1.绑定合格率' then 百分比 else 0 end 绑定百分比 ,CASE WHEN 项目='2.外观合格率' then 百分比 else 0 end 外观百分比 , CASE WHEN 项目='3.终测合格率' then 百分比 else 0 end 终测百分比from #tmpCOBwhere 项目<>'4.FQC合格率' )Agroup by A.月份) as c pivot(max(百分比) for 月份 in ([01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12])) b*/--方法二 直接采用EXP(SUM(LOG(字段)))SELECT '6.制程一次通过率',ROUND(EXP(SUM(LOG([01]))),4) as 一月,ROUND(EXP(SUM(LOG([02]))),4) as 二月,ROUND(EXP(SUM(LOG([03]))),4) as 三月, ROUND(EXP(SUM(LOG([04]))),4) as 四月,ROUND(EXP(SUM(LOG([05]))),4) as 五月,ROUND(EXP(SUM(LOG([06]))),4) as 六月,ROUND(EXP(SUM(LOG([07]))),4) as 七月,ROUND(EXP(SUM(LOG([08]))),4) as 八月,ROUND(EXP(SUM(LOG([09]))),4) as 九月,ROUND(EXP(SUM(LOG([10]))),4) as 十月,ROUND(EXP(SUM(LOG([11]))),4) as 十一月,ROUND(EXP(SUM(LOG([12]))),4) as 十二月FROM #COB where 项目<>'4.FQC合格率'union allselect case when 项目='FQC合格率目标' then '5.FQC合格率目标' else '7.一次直通率目标' end as 项目,一月,二月,三月,四月,五月,六月,七月 ,八月 ,九月 ,十月,十一月,十二月 from 制程FQC目标where 系列='COB' and 年份=@yeardrop table #tmpCOBdrop table #COBend
效果
0 0
- [易飞]EXP(SUM(LOG(字段)))的实践
- Exp 导出含有blob字段的表
- exp imp practise log
- gcc编译使用log、exp等函数的文件
- exp,expdp命令实践
- exp,expdp命令实践
- /var/log/xferlog的各个字段解析
- imp导入/exp导出,以及自己的实践
- 【Flashback】Flashback EXP功能实践
- 实现log()和exp()函数的方法,并以此计算pow()
- oracle数值函数 exp()、 floor()、 ln()、log()
- EXP-00003问题解决(解决导出表中有CLOB或BLOB字段的情况)
- EXP-00003问题解决(解决导出表中有CLOB或BLOB字段的情况)
- Log最佳实践
- Medoo Sum的使用:计算字段的值的相加
- Atitit.log日志技术的最佳实践attilax总结
- 【EXP】根据字段导出数据query
- SQL server int型的字段sum时溢出
- Android Annotations 学习笔记(更新中)
- android PopupWindow 显示问题
- Json转换利器Gson之实例二-Gson注解和GsonBuilder
- MySQL-5.6.13免安装版配置方法
- linux 安装svn
- [易飞]EXP(SUM(LOG(字段)))的实践
- 运用神经网络方法找寻集成学习中的最优权重
- 三分法
- echarts-柱状图
- DIV+CSS的经典翻页代码
- test3.4
- POJ 1408:Fishnet
- PHP中将字符串转化为整数(int) intval() printf() 性能测试
- Redhat6 File System Structure and Maintenance Guide