哎,小弟最近遇到了一个很难的困难,不知道应该如何处理,万不得于,到论坛求救,今天整天在线等待,求高人解答:
现提供测试数据:
先建立表:
----------------------------------------
create table CESHIJIJIAN
(
凭证号 VARCHAR2(30) not null,
单位 VARCHAR2(30) not null,
账套 VARCHAR2(30) not null,
年度 INTEGER not null,
项目代码 VARCHAR2(30),
项目名称 VARCHAR2(400),
摘要 VARCHAR2(200),
科目 VARCHAR2(30),
金额 NUMBER(16,2)
)
----------------------------------------
测试数据:
INSERT INTO ceshijijian values(
'JZ-12-0002','1012200','JJ0001','2006','000101','气象探测基地项目费','支付建达监理有限项目委托代建首期款','10302','40500.00');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012200','JJ0001','2006','000101','气象探测基地项目费','支付区建筑设计院有限工程设计首期款','1030502','31500.00');
INSERT INTO ceshijijian values(
'JZ-12-0003','1012200','JJ0001','2006','000101','气象探测基地项目费','支付区建筑设计院有限工程设计二期款','1030502','118125.00');
INSERT INTO ceshijijian values(
'JZ-12-0010','1012200','JJ0001','2007','000101','气象探测基地项目费','支付建达监理有限部分填土方工程招标代理','10315','12960.00');
INSERT INTO ceshijijian values(
'JZ-12-0008','1012200','JJ0001','2007','000101','气象探测基地项目费','支付建达监理有限公索体工程招标代理费','10315','49517.00');
INSERT INTO ceshijijian values(
'JZ-12-0017','1012200','JJ0001','2007','000101','气象探测基地项目费','支付四友物业有限保安合同款','10399','88000.00');
INSERT INTO ceshijijian values(
'JZ-12-0013','1012200','JJ0001','2007','000101','气象探测基地项目费','支付政分政专户补交基础设施配套费','10101','20910.96');
INSERT INTO ceshijijian values(
'JZ-12-0022','1012200','JJ0001','2007','000101','气象探测基地项目费','支付华恒工程有限公索体工程五期款','10101','567520.66');
INSERT INTO ceshijijian values(
'JZ-12-0016','1012200','JJ0001','2007','000101','气象探测基地项目费','支付番信城害虫防治有限白蚁防治','10399','10000.00');
INSERT INTO ceshijijian values(
'JZ-12-0027','1012200','JJ0001','2007','000101','气象探测基地项目费','支付淮安河海水利水电建筑安装工程有限填土方工程首期款','10101','1138307.68');
INSERT INTO ceshijijian values(
'JZ-09-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付南电电力工程有限临电高压电气工程结算费','10101','65447.31');
INSERT INTO ceshijijian values(
'JZ-04-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付华恒工程有限','10101','696770.00');
INSERT INTO ceshijijian values(
'JZ-01-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付南电电力工程有限电房工程款','10101','614000.62');
INSERT INTO ceshijijian values(
'JZ-08-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付电信设计有限公饲能化系统设计费','10201','18000.00');
INSERT INTO ceshijijian values(
'JZ-06-0002','1012200','JJ0001','2008','000101','气象探测基地项目费','支付方欣科技有限视频会商系统二期款','10201','98848.50');
INSERT INTO ceshijijian values(
'JZ-12-0002','1012200','JJ0001','2008','000101','气象探测基地项目费','支付建筑行业劳动保险金委员会办公室劳保金','10301','215657.85');
INSERT INTO ceshijijian values(
'JZ-06-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付政分政专户填土方工程质量监督费','10309','1422.88');
INSERT INTO ceshijijian values(
'JZ-10-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付区鹏展日用茶行的建筑拆除工程款','10399','35867.60');
INSERT INTO ceshijijian values(
'JZ-05-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付临海水务有限公碎江供水分司政水接入','10399','4054.40');
INSERT INTO ceshijijian values(
'JZ-12-0004','1012200','JJ0001','2008','000101','气象探测基地项目费','支付政分防空地下室易地费','10101','32580.00');
INSERT INTO ceshijijian values(
'JZ-12-0005','1012200','JJ0001','2008','000101','气象探测基地项目费','支付政分防空地下室易地费',' 10101','213.00');
INSERT INTO ceshijijian values(
'JZ-12-0003','1012200','JJ0001','2008','000101','气象探测基地项目费','支付秀珀装饰工程有限地坪漆工程款','10101','38730.00');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付南电电力工程有限万顷沙分临电低压电气工程','10101','23653.79');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012700','JJ0001','2008','000101','()化工区应急监控系统项目','拨付安全生产科学研究院化工区监控系统设计方案合同第一期费用','1030502','140000.00');
INSERT INTO ceshijijian values(
'JZ-10-0001','1012700','JJ0001','2008','000101','()化工区应急监控系统项目','拨付电信设计有限化工区应急监控系统可研报告编制费用','10307','75000.00');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付恒茂监理有限化工区监控系统工程第二期监理费','1031102','120000.00');
INSERT INTO ceshijijian values(
'JZ-10-0002','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程第一期施工进度款','10102','925362.30');
INSERT INTO ceshijijian values(
'JZ-09-0001','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程预付款','10102','6453656.95');
INSERT INTO ceshijijian values(
'JZ-12-0002','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程第三期施工进度款','10102','5709762.00');
INSERT INTO ceshijijian values(
'JZ-11-0003','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程第二期施工进度款','10102','5070486.67');
INSERT INTO ceshijijian values(
'JZ-11-0001','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付南粤工程监理有限化工区监控系统工程招标代理费','10315','107990.18');
INSERT INTO ceshijijian values(
'JZ-11-0002','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付恒茂监理有限化工区监控系统工程监理费','1031102','48000.00');
INSERT INTO ceshijijian values(
'JZ-10-0001','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付安全生产科学研究院化工区监控系统工程设计费','1030502','140000.00');
INSERT INTO ceshijijian values(
'JZ-04-0001','1012700','JJ0001','2010','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程第四期施工进度款','10102','659695.00');
INSERT INTO ceshijijian values(
'JZ-09-0001','1012700','JJ0001','2010','000101','()化工区应急监控系统项目','拨付恒茂监理有限化工区监控系统工程第三期监理费','1031102','48000.00');
INSERT INTO ceshijijian values(
'JZ-12-0002','1012701','JJ0001','2008','000101','应急办公场所项目','拨付省装饰总办公室装修第二期工程款','10101','165603.00');
INSERT INTO ceshijijian values(
'JZ-11-0001','1012701','JJ0001','2008','000101','应急办公场所项目','拨付省装饰总办公室装修第一期工程款','10101','165603.00');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012701','JJ0001','2008','000101','应急办公场所项目','拨付南粤工程监理有限办公室装修招标代理费','10315','4713.67');
INSERT INTO ceshijijian values(
'JZ-07-0001','1012701','JJ0001','2009','000101','应急办公场所项目','拨付重工监理有限办公楼装修工程监理费','1031102','7641.00');
INSERT INTO ceshijijian values(
'JZ-05-0001','1012701','JJ0001','2009','000101','应急办公场所项目','拨付省装饰总办公楼装修工程第三期费用','10101','47315.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程土建主体工程第二期工程款','10101','6621303.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程等项目服务项目招标','10336','130460.00');
INSERT INTO ceshijijian values(
'JZ-08-0004','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付体育馆土建主体工程第一期预付款','10101','27000000.00');
INSERT INTO ceshijijian values(
'JZ-08-0004','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付体育馆土建主体工程第一期工程款','10101','9918616.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程第三期工程费','10301','750000.00');
INSERT INTO ceshijijian values(
'JZ-08-0001','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付体育馆第一期服务费','10301','750000.00');
INSERT INTO ceshijijian values(
'JZ-08-0003','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付体育馆工程第二期工程费','10301','750000.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程设计第三期费用','10305','3272670.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程地质灾害危险性评估第二期费用','10305','31200.00');
-------------------------------------------------------
------------------------------------------------------=
最终我所需要得到的数据*********************************
就是要分开要得到这个项目在每一年的累积,和历史的累积。
所需要的结果附上图片,请各位大侠帮忙,不是小弟不努力,是真的没想到办法,求助。
现提供测试数据:
先建立表:
----------------------------------------
create table CESHIJIJIAN
(
凭证号 VARCHAR2(30) not null,
单位 VARCHAR2(30) not null,
账套 VARCHAR2(30) not null,
年度 INTEGER not null,
项目代码 VARCHAR2(30),
项目名称 VARCHAR2(400),
摘要 VARCHAR2(200),
科目 VARCHAR2(30),
金额 NUMBER(16,2)
)
----------------------------------------
测试数据:
INSERT INTO ceshijijian values(
'JZ-12-0002','1012200','JJ0001','2006','000101','气象探测基地项目费','支付建达监理有限项目委托代建首期款','10302','40500.00');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012200','JJ0001','2006','000101','气象探测基地项目费','支付区建筑设计院有限工程设计首期款','1030502','31500.00');
INSERT INTO ceshijijian values(
'JZ-12-0003','1012200','JJ0001','2006','000101','气象探测基地项目费','支付区建筑设计院有限工程设计二期款','1030502','118125.00');
INSERT INTO ceshijijian values(
'JZ-12-0010','1012200','JJ0001','2007','000101','气象探测基地项目费','支付建达监理有限部分填土方工程招标代理','10315','12960.00');
INSERT INTO ceshijijian values(
'JZ-12-0008','1012200','JJ0001','2007','000101','气象探测基地项目费','支付建达监理有限公索体工程招标代理费','10315','49517.00');
INSERT INTO ceshijijian values(
'JZ-12-0017','1012200','JJ0001','2007','000101','气象探测基地项目费','支付四友物业有限保安合同款','10399','88000.00');
INSERT INTO ceshijijian values(
'JZ-12-0013','1012200','JJ0001','2007','000101','气象探测基地项目费','支付政分政专户补交基础设施配套费','10101','20910.96');
INSERT INTO ceshijijian values(
'JZ-12-0022','1012200','JJ0001','2007','000101','气象探测基地项目费','支付华恒工程有限公索体工程五期款','10101','567520.66');
INSERT INTO ceshijijian values(
'JZ-12-0016','1012200','JJ0001','2007','000101','气象探测基地项目费','支付番信城害虫防治有限白蚁防治','10399','10000.00');
INSERT INTO ceshijijian values(
'JZ-12-0027','1012200','JJ0001','2007','000101','气象探测基地项目费','支付淮安河海水利水电建筑安装工程有限填土方工程首期款','10101','1138307.68');
INSERT INTO ceshijijian values(
'JZ-09-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付南电电力工程有限临电高压电气工程结算费','10101','65447.31');
INSERT INTO ceshijijian values(
'JZ-04-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付华恒工程有限','10101','696770.00');
INSERT INTO ceshijijian values(
'JZ-01-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付南电电力工程有限电房工程款','10101','614000.62');
INSERT INTO ceshijijian values(
'JZ-08-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付电信设计有限公饲能化系统设计费','10201','18000.00');
INSERT INTO ceshijijian values(
'JZ-06-0002','1012200','JJ0001','2008','000101','气象探测基地项目费','支付方欣科技有限视频会商系统二期款','10201','98848.50');
INSERT INTO ceshijijian values(
'JZ-12-0002','1012200','JJ0001','2008','000101','气象探测基地项目费','支付建筑行业劳动保险金委员会办公室劳保金','10301','215657.85');
INSERT INTO ceshijijian values(
'JZ-06-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付政分政专户填土方工程质量监督费','10309','1422.88');
INSERT INTO ceshijijian values(
'JZ-10-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付区鹏展日用茶行的建筑拆除工程款','10399','35867.60');
INSERT INTO ceshijijian values(
'JZ-05-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付临海水务有限公碎江供水分司政水接入','10399','4054.40');
INSERT INTO ceshijijian values(
'JZ-12-0004','1012200','JJ0001','2008','000101','气象探测基地项目费','支付政分防空地下室易地费','10101','32580.00');
INSERT INTO ceshijijian values(
'JZ-12-0005','1012200','JJ0001','2008','000101','气象探测基地项目费','支付政分防空地下室易地费',' 10101','213.00');
INSERT INTO ceshijijian values(
'JZ-12-0003','1012200','JJ0001','2008','000101','气象探测基地项目费','支付秀珀装饰工程有限地坪漆工程款','10101','38730.00');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012200','JJ0001','2008','000101','气象探测基地项目费','支付南电电力工程有限万顷沙分临电低压电气工程','10101','23653.79');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012700','JJ0001','2008','000101','()化工区应急监控系统项目','拨付安全生产科学研究院化工区监控系统设计方案合同第一期费用','1030502','140000.00');
INSERT INTO ceshijijian values(
'JZ-10-0001','1012700','JJ0001','2008','000101','()化工区应急监控系统项目','拨付电信设计有限化工区应急监控系统可研报告编制费用','10307','75000.00');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付恒茂监理有限化工区监控系统工程第二期监理费','1031102','120000.00');
INSERT INTO ceshijijian values(
'JZ-10-0002','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程第一期施工进度款','10102','925362.30');
INSERT INTO ceshijijian values(
'JZ-09-0001','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程预付款','10102','6453656.95');
INSERT INTO ceshijijian values(
'JZ-12-0002','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程第三期施工进度款','10102','5709762.00');
INSERT INTO ceshijijian values(
'JZ-11-0003','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程第二期施工进度款','10102','5070486.67');
INSERT INTO ceshijijian values(
'JZ-11-0001','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付南粤工程监理有限化工区监控系统工程招标代理费','10315','107990.18');
INSERT INTO ceshijijian values(
'JZ-11-0002','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付恒茂监理有限化工区监控系统工程监理费','1031102','48000.00');
INSERT INTO ceshijijian values(
'JZ-10-0001','1012700','JJ0001','2009','000101','()化工区应急监控系统项目','拨付安全生产科学研究院化工区监控系统工程设计费','1030502','140000.00');
INSERT INTO ceshijijian values(
'JZ-04-0001','1012700','JJ0001','2010','000101','()化工区应急监控系统项目','拨付机电安装有限化工区监控系统工程第四期施工进度款','10102','659695.00');
INSERT INTO ceshijijian values(
'JZ-09-0001','1012700','JJ0001','2010','000101','()化工区应急监控系统项目','拨付恒茂监理有限化工区监控系统工程第三期监理费','1031102','48000.00');
INSERT INTO ceshijijian values(
'JZ-12-0002','1012701','JJ0001','2008','000101','应急办公场所项目','拨付省装饰总办公室装修第二期工程款','10101','165603.00');
INSERT INTO ceshijijian values(
'JZ-11-0001','1012701','JJ0001','2008','000101','应急办公场所项目','拨付省装饰总办公室装修第一期工程款','10101','165603.00');
INSERT INTO ceshijijian values(
'JZ-12-0001','1012701','JJ0001','2008','000101','应急办公场所项目','拨付南粤工程监理有限办公室装修招标代理费','10315','4713.67');
INSERT INTO ceshijijian values(
'JZ-07-0001','1012701','JJ0001','2009','000101','应急办公场所项目','拨付重工监理有限办公楼装修工程监理费','1031102','7641.00');
INSERT INTO ceshijijian values(
'JZ-05-0001','1012701','JJ0001','2009','000101','应急办公场所项目','拨付省装饰总办公楼装修工程第三期费用','10101','47315.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程土建主体工程第二期工程款','10101','6621303.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程等项目服务项目招标','10336','130460.00');
INSERT INTO ceshijijian values(
'JZ-08-0004','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付体育馆土建主体工程第一期预付款','10101','27000000.00');
INSERT INTO ceshijijian values(
'JZ-08-0004','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付体育馆土建主体工程第一期工程款','10101','9918616.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程第三期工程费','10301','750000.00');
INSERT INTO ceshijijian values(
'JZ-08-0001','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付体育馆第一期服务费','10301','750000.00');
INSERT INTO ceshijijian values(
'JZ-08-0003','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付体育馆工程第二期工程费','10301','750000.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程设计第三期费用','10305','3272670.00');
INSERT INTO ceshijijian values(
'JZ-08-0005','1013700','JJ0050','2011','000101','区体育中心工程','补录08年支付 体育馆工程地质灾害危险性评估第二期费用','10305','31200.00');
-------------------------------------------------------
------------------------------------------------------=
最终我所需要得到的数据*********************************
就是要分开要得到这个项目在每一年的累积,和历史的累积。
所需要的结果附上图片,请各位大侠帮忙,不是小弟不努力,是真的没想到办法,求助。
--grouping(单位),grouping(年度), grouping(年度||''),decode ( grouping(单位)*10+grouping(年度||''),11, sum(金额) over( order by nvl(年度,年度||''),凭证号),10,sum(金额),金额) 最终金额 from ceshijijiangroup by grouping sets((凭证号, 单位, 账套, 年度, 项目代码, 项目名称, 摘要, 科目, 金额),(年度),(年度||''))
order by 拷贝年度,凭证号,grouping(年度||'')
grouping(单位),grouping(年度||''),grouping(年度), decode ( grouping(单位)*10+grouping(年度||''),11, sum(金额) over(partition by 项目代码 order by nvl(年度,年度||''),凭证号),10,sum(金额) ,金额) 最终金额 from ceshijijiangroup by grouping sets((凭证号, 单位, 账套, 年度, 项目代码, 项目名称, 摘要, 科目, 金额),(项目代码,年度),(项目代码,年度||''))
order by 项目代码,拷贝年度,凭证号,grouping(年度||'')
你现在的结果出来
-------------------------
凭证号 单位
JZ-12-0003 1012200
JZ-12-0002 1012200
本年合计
累积合计
--------------------------
我需要的结果为:
-------------------------
凭证号 单位
JZ-12-0003 1012200
JZ-12-0002 1012200
本年合计 1012200
累积合计 1012200
--------------------------
谢谢
-------------现在数据库出来的
4 年度合计 2006 000101
5 项目累计 2006 000101
-------------我要的是
4 年度合计 1012200 JJ0001 2006 000101
5 项目累计 1012200 JJ0001 2006 000101
谢谢。
请帮忙再看看吧。
首先,上面的sql算的是一个年度一个项目里的所有单位和帐套,如果你要显示,显示的是哪个?如果你确定一个年度一个项目里面只有一个单位和一个帐套select 凭证号, nvl(单位,decode(grouping(年度),1,'年度合计','项目累计')) 单位, 账套, nvl(年度,年度||'') 拷贝年度, 项目代码, 项目名称, 摘要, 科目,
--grouping(单位),grouping(年度||''),grouping(年度), decode ( grouping(单位)*10+grouping(年度||''),11, sum(金额) over(partition by 单位, 账套,项目代码 order by nvl(年度,年度||''),凭证号),10,sum(金额) ,金额) 最终金额 from ceshijijiangroup by grouping sets((凭证号, 单位, 账套, 年度, 项目代码, 项目名称, 摘要, 科目, 金额),(单位, 账套,项目代码,年度),(单位, 账套,项目代码,年度||''))
order by 项目代码,拷贝年度,凭证号,grouping(年度||'')