当前位置: 代码迷 >> PB >> 大哥
  详细解决方案

大哥

热度:367   发布时间:2016-04-29 07:22:22.0
请教各位大哥
今天帮人家写一个报表程序,其中一条要求把按时间统计普通医保和统筹医保,而区分是普通医保还是统筹医保是一个16位字符串,例如('8823181282228222'),如果是8则是统筹医保,其余的就是普通医保,如何可以正确统计。
------解决方案--------------------
string  ls_str = '8823181282228222'

ls_str = mid(ls_str,8,1)

可在dw增加两虚拟列T_1,T_2
下面可用循环
if ls_str = '8' then
    统筹医保
    set T_1 = 1    
else
    普通医保
    set T_2 = 1  
end if
计算这两字段

还有一种就是用sql语句
以oracle为例
select
sum(case when substr(字段,8,1) = '8' then 1 else 0 end) as T_1,   //统筹医保
sum(case when substr(字段,8,1) <> '8' then 1 else 0 end) as T_2  //普通医保
from dual;

------解决方案--------------------
引用:
按照你的方法建立了虚拟列,可以显示出该病人是普通病人还是统筹病人,但如何筛选。数据库为sql2005

如果你加虚拟列,在summary区加两个计算列sum这两个字段,
其实用sql语句实现最好的了,你查一下sql2005的字符截取函数,把substr替换掉就行了
  相关解决方案