我的数据就像
200201 0
200202 2
200203 0
200204 4
200205 0
200206 0
200207 0
200208 0
200209 0
200210 0
200211 0
200212 5
200301 0
200302 0
200303 0
200304 0
200305 2
200306 0
200307 0
200308 0
200309 0
200310 0
200311 3
200312 0
200401 0
200402 0
我想要输出
2002FEB 2
MAR2002TOFEB2003 9
MAR2003TOFEB2004 5
答案 0 :(得分:0)
你需要像这样的分组查询:
select 'MAR '||(year-1)||' to FEB '||year period, sum(val) sum_val
from (select distinct substr(mth, 1, 4) year from data) y
join data d on y.year-1 ||'02' < d.mth and d.mth <= y.year || '02'
group by year order by year
输出:
PERIOD SUM_VAL
-------------------- ----------
MAR 2001 to FEB 2002 2
MAR 2002 to FEB 2003 9
MAR 2003 to FEB 2004 5
测试数据:
create table data (mth varchar2(6), val number(3));
insert into data values (200201, 0);
insert into data values (200202, 2);
insert into data values (200203, 0);
insert into data values (200204, 4);
insert into data values (200205, 0);
insert into data values (200206, 0);
insert into data values (200207, 0);
insert into data values (200208, 0);
insert into data values (200209, 0);
insert into data values (200210, 0);
insert into data values (200211, 0);
insert into data values (200212, 5);
insert into data values (200301, 0);
insert into data values (200302, 0);
insert into data values (200303, 0);
insert into data values (200304, 0);
insert into data values (200305, 2);
insert into data values (200306, 0);
insert into data values (200307, 0);
insert into data values (200308, 0);
insert into data values (200309, 0);
insert into data values (200310, 0);
insert into data values (200311, 3);
insert into data values (200312, 0);
insert into data values (200401, 0);
insert into data values (200402, 0);
答案 1 :(得分:0)
Oracle设置
CREATE TABLE data (
year_month CHAR(6),
val INT
);
(插入数据)
<强>查询强>:
SELECT 'MAR' || Year || 'TOFEB' || ( Year + 1 ) AS range,
SUM( val ) AS total
FROM (
SELECT EXTRACT( YEAR FROM ADD_MONTHS( TO_DATE( year_month, 'YYYYMM' ), -2 ) ) AS year,
val
FROM data
)
GROUP BY year
ORDER BY year;
<强>输出强>:
RANGE TOTAL
---------------- -----
MAR2001TOFEB2002 2
MAR2002TOFEB2003 9
MAR2003TOFEB2004 5