免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2084 | 回复: 0
打印 上一主题 下一主题

as400的sql中sum?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-08 19:19 |只看该作者 |倒序浏览
本帖最后由 jxfnew 于 2010-03-08 20:17 编辑

pf文件:
cstzlga的定義為:
Seq  Field              File               Type                 Length  Scale  
     LAPN               CSTZLGA            CHARACTER-O              15         
     LACPN              CSTZLGA            CHARACTER-O              15         
     LAQTY              CSTZLGA            DECIMAL                  15     7   
     LAUDAT             CSTZLGA            DECIMAL                   8         
                                                                              
cstzlgb的定義:
                                                                              
Seq  Field              File               Type                 Length  Scale
      LBCPN              CSTZLGB            CHARACTER-O              15        
      LBCOST             CSTZLGB            DECIMAL                  15     7  
      LBLCST             CSTZLGB            DECIMAL                  15     7  
      LBUDAT             CSTZLGB            DECIMAL                   8        
                                                     
在as400上strsql:
用select   LAQTY *                                                
(SELECT LBCOST FROM Y2CHAUSF/CSTZLGB c WHERE LBCPN = A.lacpn AND   
   c.LBUDAT = (SELECT MAX( LBUDAT ) FROM Y2CHAUSF/CSTZLGB d WHERE   
   c.LBCPN = d.LBCPN AND LBUDAT <= 20081209)) as amt              
      from y2chausf/cstzlga a  where lapn = 'QFE0014X000X004'      
and laudat =                                                      
(SELECT max( LAUDAT ) FROM Y2CHAUSF/CSTZLGa b WHERE a.LAPN = b.lapn
   and LAUDAT <= 20081209 )  
能正确取出所行资料并且均有非空的数值.              
select sum(round( LAQTY *                                          
(SELECT LBCOST FROM Y2CHAUSF/CSTZLGB c WHERE LBCPN = A.lacpn AND   
   c.LBUDAT = (SELECT MAX( LBUDAT ) FROM Y2CHAUSF/CSTZLGB d WHERE   
   c.LBCPN = d.LBCPN AND LBUDAT <= 20081209)) ,7))  as amt         
      from y2chausf/cstzlga a  where lapn = 'QFE0014X000X004'      
and laudat =                                                      
(SELECT max( LAUDAT ) FROM Y2CHAUSF/CSTZLGa b WHERE a.LAPN = b.lapn
   and LAUDAT <= 20081209 )                                         
  結果為:
                                 AMT
                    2.84710870000000
而去掉round後
select  sum( LAQTY *                                                
(SELECT LBCOST FROM Y2CHAUSF/CSTZLGB c WHERE LBCPN = A.lacpn AND   
   c.LBUDAT = (SELECT MAX( LBUDAT ) FROM Y2CHAUSF/CSTZLGB d WHERE   
   c.LBCPN = d.LBCPN AND LBUDAT <= 20081209)))  as amt              
      from y2chausf/cstzlga a  where lapn = 'QFE0014X000X004'      
and laudat =                                                      
(SELECT max( LAUDAT ) FROM Y2CHAUSF/CSTZLGa b WHERE a.LAPN = b.lapn
   and LAUDAT <= 20081209 )                                         
  的結果變為空值:
                           AMT  
                              -
为何会这样??
多谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP