分享
 
 
 

Oracle 按年或月进行统计

王朝学院·作者佚名  2009-12-08
窄屏简体版  字體: |||超大  

csdn上看到的问题,想想写了一个。不对的地方请指正。

画面机能要求对一张表的数据进行统计

表定义(略去用不到的字段)

LB01_PURRECEIVEBOOK

PURRECEIVEDATE DATE, --format: 2009/11/01

RECEIVEAMT NUMBER

① 按年统计时,如果出现空年,则做成该年度金额为0

例:

2009/09/01 1,000

2009/11/01 3,000

2007/12/01 2,000

抽出:

2009 4,000

2008 0

2007 2,000

②按月统计时,出现空月,则做成该月份金额为0

2009/09/01 1,000

2009/11/01 3,000

2009/12/01 2,000

抽出:

2009/09 1,000

2009/10 0

2009/11 3,000

2009/12 2,000

这个可以比较简单的作出来吗?

按照年统计

view plaincopy to clipboardprint?

WITH tmp_table AS (SELECT MAX(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) -

MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS NUM,

MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS MINYEAR

FROM LB01_PURRECEIVEBOOK T

),

select_table AS (

SELECT TMP.YEARSUM, TMP.YEAR, TMP.YMD

FROM (SELECT SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE DESC) AS YEARSUM,

TO_CHAR(T.PURRECEIVEDATE, 'yyyy') AS YEAR,

TO_CHAR(T.PURRECEIVEDATE, 'yyyy/mm/dd') AS YMD,

ROW_NUMBER() OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE) AS RN

FROM LB01_PURRECEIVEBOOK T) TMP

WHERE TMP.RN = 1

),

creatyear_table AS (

SELECT tmp_table.MINYEAR + LEVEL - 1 AS tmp_year FROM DUAL, tmp_table

CONNECT BY LEVEL <= tmp_table.NUM + 1

)

SELECT

ct.tmp_year,

NVL(st.YEARSUM, 0) AS YEARSUM

FROM

creatyear_table ct,

select_table st

WHERE

ct.tmp_year = st.year(+)

WITH tmp_table AS (SELECT MAX(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) -

MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS NUM,

MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS MINYEAR

FROM LB01_PURRECEIVEBOOK T

),

select_table AS (

SELECT TMP.YEARSUM, TMP.YEAR, TMP.YMD

FROM (SELECT SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE DESC) AS YEARSUM,

TO_CHAR(T.PURRECEIVEDATE, 'yyyy') AS YEAR,

TO_CHAR(T.PURRECEIVEDATE, 'yyyy/mm/dd') AS YMD,

ROW_NUMBER() OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE) AS RN

FROM LB01_PURRECEIVEBOOK T) TMP

WHERE TMP.RN = 1

),

creatyear_table AS (

SELECT tmp_table.MINYEAR + LEVEL - 1 AS tmp_year FROM DUAL, tmp_table

CONNECT BY LEVEL <= tmp_table.NUM + 1

)

SELECT

ct.tmp_year,

NVL(st.YEARSUM, 0) AS YEARSUM

FROM

creatyear_table ct,

select_table st

WHERE

ct.tmp_year = st.year(+)

按照月进行统计

view plaincopy to clipboardprint?

WITH tmp_table AS (SELECT MAX(TO_CHAR(T.PURRECEIVEDATE, 'mm')) -

MIN(TO_CHAR(T.PURRECEIVEDATE, 'mm')) AS NUM,

MIN(TO_CHAR(T.PURRECEIVEDATE, 'mm')) AS MINMM,

MIN(TO_CHAR(T.PURRECEIVEDATE, 'YYYY')) AS MINY

FROM LB01_PURRECEIVEBOOK T

),

select_table AS (

SELECT TMP.MMSUM, TMP.MM, TMP.YMD

FROM (SELECT SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'MM') ORDER BY T.PURRECEIVEDATE DESC) AS MMSUM,

TO_CHAR(T.PURRECEIVEDATE, 'MM') AS MM,

TO_CHAR(T.PURRECEIVEDATE, 'yyyy/mm/dd') AS YMD,

ROW_NUMBER() OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'MM') ORDER BY T.PURRECEIVEDATE) AS RN

FROM LB01_PURRECEIVEBOOK T) TMP

WHERE TMP.RN = 1

),

creatyear_table AS (

SELECT tmp_table.MINMM + LEVEL - 1 AS TMP_MM,

TO_CHAR(TO_DATE(MINY || tmp_table.MINMM + LEVEL - 1, 'YYYY-MM'), 'YYYY-MM') AS TMP_YM

FROM DUAL, tmp_table

CONNECT BY LEVEL <= tmp_table.NUM + 1

)

SELECT

ct.TMP_YM,

TO_CHAR(NVL(ST.MMSUM, 0), '9,999') AS MMSUM

FROM

creatyear_table CT,

select_table ST

WHERE

CT.TMP_MM = ST.MM(+)

ORDER BY

ct.TMP_YM

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有