在wabacus框架中实现交叉报表

<col column="param_name" staticondition= "param_name='#data#'" dataset="e_yc_history">
                <statistic id="static1" type="sum" column="param_value" valuestyleproperty="align='center'"></statistic>
                <format><!-- 对动态表头数据进行格式化 -->
                        <imports>
                               <import>java.util.*</import>
                         </imports>
                        <value>
                            <![CDATA[
                                if(mDynamicColData!=null&&mDynamicColData.size()>0)
                                {
                                    Iterator itKeys=mDynamicColData.keySet().iterator();
                                    while(itKeys.hasNext())
                                    {
                                        String key = (String)itKeys.next();
                                        String value = (String)mDynamicColData.get(key);
                                        if(value!=null&&!value.trim().equals(""))
                                             mDynamicColData.put(key,value);
                                    }
                                }
                            ]]>
                        </value>
                 </format>
                 </col>
交叉报表在查询的时候要注意,如果动态列是汉字或者是字符串的话要在把#data#用单引号括起来,这是因为框架在拼凑sql 语句的时候如果是数字的话不会影响的,但如果是汉字或者字符串的话就会出错的。下面看个例子:
动态列的SQL语句是:select guid,sum(case when param_name='温度' then param_value  end ) as column_10000 from tb; 就是找出动态列是温度的值,如果在#data#前面不加‘’单引号的话就会变成select guid,sum(case when param_name=温度 then param_value  end ) as column_10000 from tb;所以就会出错的。
注:上面的<statistic>和<format>标签都是针对<col>标签的,所以要放在<col>标签里面,也就是
<col>
<statistic></statistic>
<format></format>.
</col>

 

你可能感兴趣的:(java,wabacus)