读书人

大哥

发布时间: 2012-12-30 10:43:15 作者: rapoo

请教各位大哥
今天帮人家写一个报表程序,其中一条要求把按时间统计普通医保和统筹医保,而区分是普通医保还是统筹医保是一个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替换掉就行了

读书人网 >PB

热点推荐