reporting services 开发报表,数据为何在portal中不能完全显示

上一篇 / 下一篇  2008-05-07 10:39:11 / 个人分类:数据库

   reporting services 开发报表,数据在portal中有部分数据不能完全显示,但是这些数据在oracle数据库中可以查到,由于这边的数据库与YEA的数据库不一样,在china中运行时好的,但是在YEA那边总是会有这个问题,当时也想到了会不会是字段太长,报表所容纳的长度段了,我把后面的format函数保留的4位小数点改成round函数保留2位小数点,还是不行,幸好有个同事还在新加坡出差,他以前也做过报表,查到出错的原因了。

在数据库中运行的小数点的位数超过了报表显示的长度,所以改了主查询,将主SQL那那四个出错的字段加上round函数,先保留四位小数点,也就是截短那些超过4位小数点的数据的字段就可以了。呵呵,今天又学习到了点东西

原始的查询:

SELECT
 SDR.comp_id
 ,SDR.proj_class
 ,SDR.ord_type
 ,SDR.project_no
 ,SDR.co_no
 ,SDR.co_item_no
 ,SDR.customer_name
 ,SDR.sales_dept_id
 ,SDR.status
 ,SDR.contract_currency
 ,SDR.ord_amt_contr
 ,SDR.ord_amt_inhse
 ,((SDR.ord_amt_contr / co_amt.ord_amt_contr_tot) * NVL(IVR.invc_actual_amt,0)) invc_actual_amt
 ,((SDR.ord_amt_contr / co_amt.ord_amt_contr_tot) * NVL(IVR.invc_actual_amt,0) * SDR.inhouse_exchange_rate) invc_actual_inhse
 ,(SDR.ord_amt_contr - ((SDR.ord_amt_contr / CO_AMT.ord_amt_contr_tot) * NVL(IVR.invc_actual_amt,0))) backlog_contr
 ,(SDR.ord_amt_inhse - ((SDR.ord_amt_contr / CO_AMT.ord_amt_contr_tot) * NVL(IVR.invc_actual_amt,0) * SDR.inhouse_exchange_rate)) backlog_inhse

modify后的查询:

SELECT
 SDR.comp_id
 ,SDR.proj_class
 ,SDR.ord_type
 ,SDR.project_no
 ,SDR.co_no
 ,SDR.co_item_no
 ,SDR.customer_name
 ,SDR.sales_dept_id
 ,SDR.status
 ,SDR.contract_currency
 ,SDR.ord_amt_contr
 ,SDR.ord_amt_inhse
 ,ROUND( DECODE(NVL(co_amt.ord_amt_contr_tot,0) , 0 ,0 ,  ((NVL(SDR.ord_amt_contr,0) / co_amt.ord_amt_contr_tot) * NVL(IVR.invc_actual_amt,0))),4) invc_actual_amt
 ,ROUND(DECODE(NVL(co_amt.ord_amt_contr_tot,0) , 0 ,0 ,  ((NVL(SDR.ord_amt_contr,0) / co_amt.ord_amt_contr_tot) * NVL(IVR.invc_actual_amt,0) * SDR.inhouse_exchange_rate) ),4) invc_actual_inhse
 ,ROUND(DECODE(NVL(co_amt.ord_amt_contr_tot,0) , 0 ,0 , (SDR.ord_amt_contr - ((SDR.ord_amt_contr / CO_AMT.ord_amt_contr_tot) * NVL(IVR.invc_actual_amt,0)))),4) backlog_contr
 ,ROUND(DECODE(NVL(co_amt.ord_amt_contr_tot,0) , 0 ,0 , (SDR.ord_amt_inhse - ((SDR.ord_amt_contr / CO_AMT.ord_amt_contr_tot) * NVL(IVR.invc_actual_amt,0) * SDR.inhouse_exchange_rate))),4) backlog_inhse

我认为在后面的where条件中已经限制了co_amt.ord_amt_contr_tot<>0,所以可以不用nvl与decode函数来限制co_amt.ord_amt_contr_tot=0的情况


TAG: 个人日记

 

评分:0

我来说两句

Open Toolbar