oracle中一个关于不同时间复合查询的请教!
比如我有一个表tableA,其中字段数据如下
name Anum Bnum Dtime
K11 10 2 2002/02/03
F12 3 9 2002/02/04
K11 4 3 2002/02/10
K11 21 22 2002/02/12
F12 5 4 2002/02/12
F12 12 12 2002/02/13
需要做如下统计查询:
设定一标准时间2002/02/11
对每个name的字段Anum,Bnum做如下统计:Anum查在标准时间之前<的记录和sum(Anum),Bnum查在标准时间后>=的记录和sum(Bnum),则可得到如下查询结果:
name Anum Bnum
K11 10+4=14 22
F12 3 4+12=16
请问该如何写这个查询语句?若无法使用一个select语句表达出来,请帮忙写出复合查询的,即写成视图也行。
多谢了
问题点数:100、回复次数:7Top
1 楼hdkkk(Piggy)回复于 2002-08-20 11:11:34 得分 70
select name,sum(anum),sum(bnum) from(
select name,anum,0 from tablea where dtime<to_date('2002/02/11','yyyy'/mm/dd')
union
select name,0,bnum from tablea where dtime>=to_date('2002/02/11','yyyy'/mm/dd'))
group by name;
Top
2 楼faintyzxm(faint)回复于 2002-08-20 11:13:08 得分 0
时间的比较不用细究,只需用Dtime>=LevelTime或Dtim<LevelTime就行Top
3 楼jlandzpa(jlandzpa)回复于 2002-08-20 11:18:58 得分 20
select name,
sum(decode(sign(20020211 - to_number(replace(Dtime,'/',''))),1,Anum,0)) Anum,
sum(decode(sign(20020211 - to_number(replace(Dtime,'/',''))),1,0,bnum)) Bnum
from tableA group by name;
NAME ANUM BNUM
---------- ---------- ----------
F12 3 16
K11 14 22
已用时间: 00: 00: 00.20
11:09:19 jlanzpa817>Top
4 楼wujinbao(abao)回复于 2002-08-20 11:30:52 得分 10
select name,
sum(case to_char(Dtime,'yyyy-mm-dd') < '2002-02-11' then Anum),sum(case to_char(Dtime,'yyyy-mm-dd') >= '2002-02-11' then Bnum) from tableA group by name;
这只是个大概意思,没有建表测试。Top
5 楼faintyzxm(faint)回复于 2002-08-20 11:35:49 得分 0
为什么我的语句里面
select name,sum(A),sum(B) from(
select name,anum as A,0 from tablea where dtime<to_date('2002/02/11','yyyy'/mm/dd')
union
select name,0,bnum as B from tablea where dtime>=to_date('2002/02/11','yyyy'/mm/dd'))
group by name
将提取的字段自定义其名as A,B的时候,会出现无效列名?Top
6 楼faintyzxm(faint)回复于 2002-08-20 11:39:54 得分 0
搞定!
结贴!Top
7 楼jlandzpa(jlandzpa)回复于 2002-08-20 11:44:57 得分 0
select name,
sum(decode(sign(20020211 - to_number(replace(Dtime,'/',''))),1,Anum,0)) Anum,
sum(decode(sign(20020211 - to_number(replace(Dtime,'/',''))),1,0,bnum)) Bnum
from tableA group by name;
Top




