Oracle 数据汇总语句!
发布网友
发布时间:2022-04-07 20:48
我来回答
共4个回答
热心网友
时间:2022-04-07 22:18
如2011年1月day2日到2012年2月day1日,
这个查询条件,同时还有减掉2011年1月的day1,day3和2012年2月day2,day3,
减去的是其他字段,
这个似乎需要使用动态sql
declare
Type cid Is Table Of Varchar2(20);
cidset1 cid;
i int;
v_col varchar2(1000);
v_colb varchar2(4000);
v_cole varchar2(4000);
v_sum number(10)
begin
--开始条件中需要减去的日列
Select COLUMN_NAME
Bulk CollectInto cidset1
From dba_tab_cols WHERE table_name=表名
and COLUMN_NAME LIKE '%DAY%' AND SUBSTR(COLUMN_NAME,INSTR(COLUMN_NAME,'Y')+1)<SUBSTR(bdate,10);
if cidset1.Count > 0 Then
v_col:=cidset1(1);
end if;
for i in 2..cidset1.Count loop
v_colb:=v_col||'+'||cidset1(i);
end loop;
end;
--结束条件中需要减去的日列
Select COLUMN_NAME Bulk Collect
Into cidset1
From dba_tab_cols WHERE dba_tab_cols=表名
and COLUMN_NAME LIKE '%DAY%' AND SUBSTR(COLUMN_NAME,INSTR(COLUMN_NAME,'Y')+1)>SUBSTR(edate,10)
if cidset1.Count > 0 Then
v_col:=cidset1(1);
for i in 2..cidset1.Count loop
v_cols:=v_col+cidset1(i);
end loop;
结果集
select sum(月汇总) into v_sum from 表 where 年||lpad(月,2,'0') between bdate and edate;
execute immediate 'select ||v_sum||'-1*sum('||v_colb||'+'||v_cols||') from 表 where 年||lpad(月,2,'0') in(:bdate,:edate)' using v_colb,v_cols,bdate,edate';
end;
热心网友
时间:2022-04-07 23:36
按照此表,来做日期间的数据汇总,sql语句将变得非常复杂
如果变为
日期 个数
yyyymmdd n
这种形式将会非常容易汇总
如果此表的结构不能改变,可以考虑创建view,做中间转换,然后汇总view的结果
热心网友
时间:2022-04-08 01:10
SELECT hz-d1-d23 from
(SELECT SUM(b.月汇总) hz from b WHERE b.年||b.月 BETWEEN 20111 AND 20122)B,
(SELECT b.day1 d1 from b WHERE b.年||b.月=20111)C,
(SELECT b.day2+b.day3 d23 from b WHERE b.年||b.月=20122)D
热心网友
时间:2022-04-08 03:02
没明白,你最终想要得到的是什么结果?是你说的表达式,还是一个汇总的数据?