- 最后登录
- 2015-5-21
- 在线时间
- 100 小时
- 威望
- 0
- 金钱
- 345
- 注册时间
- 2012-12-19
- 阅读权限
- 10
- 帖子
- 99
- 精华
- 0
- 积分
- 0
- UID
- 824
|
1#
发表于 2013-3-6 14:36:21
|
查看: 3451 |
回复: 3
本帖最后由 张沛 于 2013-3-6 15:10 编辑
昨天看了一本书,大致写的是
“一个查询对一张临时表查询进行了10次扫描,改下一sql的存储过程,就只需要一遍,例子:
select 'A' ,count(*) from TMP where status='A union all
select 'B' ,count(*) from TMP where status='B' union all
select 'C' ,count(*) from TMP where status='C' union all
select 'D' ,count(*) from TMP where status='D' union all
”存储过程如下
declear
va:integer; vb :intger; vc:integer;vd:integer;
begin va:=0;vb:=0;vc:=0;vd:=0;
for c in (select status from TMP) loop
if c.status='a' then va:=va+1
else
if c.status='b' then va:=vb+1
else
if c.status='c' then va:=vc+1
else
if c.status='d' then va:=vd+1
end if;
end if;
end if;
end if;
end loop;
.....
end;
例子中是oltp的一张临时表,如果换成olap的大表这种方法适不适合? |
|