问题描述
您好,先生-尝试计算滚动金额左右。
当
创建表tbl1 (年号,月varchar2(3),col1 varchar2(10),col2 varchar2 (20),金额号)
我需要列出col1,col2的值以及以下计算的值 (我相信它是滚动和)
{年,月 (例如: 2016,02),col1,col2的总和 (金额)}/{过去12个月的总和 (金额) 3月15日2月16日}。尝试在单个SQL中或使用任何分析函数等。
创建表tbl1 (年号,月varchar2(3),col1 varchar2(10),col2 varchar2 (20),金额号);
插入tbl1值 (2015,'1','abc','temp123',7259.1);
插入tbl1值 (2015,'1','def','temp123',7259.1);
插入tbl1值 (2015,'1','def','temp345',729.1);
插入tbl1值 (2015,'3','abc','temp35',659);
插入tbl1值 (2014,'1','abc','temp123',259);
插入tbl1值 (2014,'2','def','temp123',7259.45);
插入tbl1值 (2014,'1','def','temp345',874.8);
插入tbl1值 (2013,'2','val2','temp123',6547.8);
插入tbl1值 (2013,'3','val2','temp345 ',862.0);
插入tbl1值 (2013,'3','val3','temp345 ',659);
希望我足够清楚
当
创建表tbl1 (年号,月varchar2(3),col1 varchar2(10),col2 varchar2 (20),金额号)
我需要列出col1,col2的值以及以下计算的值 (我相信它是滚动和)
{年,月 (例如: 2016,02),col1,col2的总和 (金额)}/{过去12个月的总和 (金额) 3月15日2月16日}。尝试在单个SQL中或使用任何分析函数等。
创建表tbl1 (年号,月varchar2(3),col1 varchar2(10),col2 varchar2 (20),金额号);
插入tbl1值 (2015,'1','abc','temp123',7259.1);
插入tbl1值 (2015,'1','def','temp123',7259.1);
插入tbl1值 (2015,'1','def','temp345',729.1);
插入tbl1值 (2015,'3','abc','temp35',659);
插入tbl1值 (2014,'1','abc','temp123',259);
插入tbl1值 (2014,'2','def','temp123',7259.45);
插入tbl1值 (2014,'1','def','temp345',874.8);
插入tbl1值 (2013,'2','val2','temp123',6547.8);
插入tbl1值 (2013,'3','val2','temp345 ',862.0);
插入tbl1值 (2013,'3','val3','temp345 ',659);
希望我足够清楚
专家解答
您可以使用analytics的窗口子句获得滚动总和 (或计数,或其他)。这指定了要包括在计算中的行数或值范围。
你不知道在过去的12个月里会有多少行。所以你需要使用范围。您可以使用它来声明要从当前行包含的值的偏移量。
您的 “日期” 是单独的年份和月份值。使用这些计算偏移量是很棘手的。首先将它们转换为日期要容易得多。然后,您可以指定要回顾 (或向前) 的月数作为间隔。
这给你:
您可以在以下位置阅读更多信息:
http://www.oracle.com/technetwork/issue-archive/2013/13-mar/o23sql-1906475.html
或在以下位置观看Connor的视频:
https://www.youtube.com/watch?v=dovPI166tcs
https://www.youtube.com/watch?v=oeRZFZUXs1U
PS-共享LiveSQL链接时,您不能仅从会话中复制粘贴URL!您需要先将其保存为公共脚本。然后共享公共URL。
你不知道在过去的12个月里会有多少行。所以你需要使用范围。您可以使用它来声明要从当前行包含的值的偏移量。
您的 “日期” 是单独的年份和月份值。使用这些计算偏移量是很棘手的。首先将它们转换为日期要容易得多。然后,您可以指定要回顾 (或向前) 的月数作为间隔。
这给你:
create table tbl1 ( year number, month varchar2(3), col1 varchar2(10), col2 varchar2 (20), amount number ); insert into tbl1 values (2015, '1', 'abc','temp123',7259.1); insert into tbl1 values (2015, '1', 'def','temp123',7259.1); insert into tbl1 values (2015, '1', 'def','temp345',729.1); insert into tbl1 values (2015, '3', 'abc','temp35',659); insert into tbl1 values (2014, '1', 'abc','temp123',259); insert into tbl1 values (2014, '2', 'def','temp123',7259.45); insert into tbl1 values (2014, '1', 'def','temp345',874.8); insert into tbl1 values (2013, '2', 'VAL2','temp123',6547.8); insert into tbl1 values (2013, '3', 'VAL2','temp345',862.0); insert into tbl1 values (2013, '3', 'VAL3','temp345',659); select t.*, sum(amount) over ( order by to_date(year || lpad(month, 2, '0') || '01', 'yyyymmdd') range between interval '12' month preceding and current row ) sm_12_months from tbl1 t order by to_date(year || lpad(month, 2, '0') || '01', 'yyyymmdd'); YEAR MONTH COL1 COL2 AMOUNT SM_12_MONTHS 2,013 2 VAL2 temp123 6,547.8 6,547.8 2,013 3 VAL2 temp345 862 8,068.8 2,013 3 VAL3 temp345 659 8,068.8 2,014 1 abc temp123 259 9,202.6 2,014 1 def temp345 874.8 9,202.6 2,014 2 def temp123 7,259.45 16,462.05 2,015 1 abc temp123 7,259.1 23,640.55 2,015 1 def temp123 7,259.1 23,640.55 2,015 1 def temp345 729.1 23,640.55 2,015 3 abc temp35 659 15,906.3复制
您可以在以下位置阅读更多信息:
http://www.oracle.com/technetwork/issue-archive/2013/13-mar/o23sql-1906475.html
或在以下位置观看Connor的视频:
https://www.youtube.com/watch?v=dovPI166tcs
https://www.youtube.com/watch?v=oeRZFZUXs1U
PS-共享LiveSQL链接时,您不能仅从会话中复制粘贴URL!您需要先将其保存为公共脚本。然后共享公共URL。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。