Oracle-SQL-select问题

1605169811114236.xlsx

如附件,

库中已有表T1求表T2,

表T2中A2值是给定的,B列公式中0.0057是常量,其余的公式都在xlsx里。

请问用oracle sql怎么查出这么一张表?

本人分析函数用的不是很6,但是隐约感觉各种分析函数和Oracle高阶子句应该可以实现。

附件已更新

朝赟丶 发布于 2020-11-12 16:32 (编辑于 2020-11-13 10:08)
1min目标场景问卷 立即参与
回答问题
悬赏:10 F币 4人赏过 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
tyne.xuLv3见习互助
发布于2020-11-13 14:59(编辑于 2020-11-13 15:03)
create table t1
(
    id number,
    a float,
    b float
);

create table t2
(
    id number,
    a float,
    b float,
    c float
);

insert into t1 (1,666527.753905677,0.0057);
create or replace function testt1(key IN number)
return INTEGER
is
PRAGMA AUTONOMOUS_TRANSACTION;
numb INTEGER;
i number;

begin
  for i in  1..key  loop
    select count(*) into numb from t2;    
    if(numb = 0) then
       insert into t2 select id,a,a*b as b,a*b+a as c from t1 where rownum = 1;
    else 
      insert into t2
      select numb+1 as id,a.c as a, a.c*b.b as b, a.c*b.b+a.c as c 
      from t2 a
      left join (select * from t1 where id = 1) b on 1=1
      where a.id=numb;
    end if;
  end loop;
 COMMIT;
 return(numb);
end testt1;

调用方法:

select testt1(10) from dual; --参数为添加10行

运行结果:

image.png

最佳回答
0
ColdmanLv6高级互助
发布于2020-11-12 16:57(编辑于 2020-11-12 16:58)

~~~

最佳回答
0
じve°微笑Lv5见习互助
发布于2020-11-12 18:05(编辑于 2020-11-12 18:08)

需求说的不是很详细,没看太明白,是不是这样?

SELECT 字段A,字段A*0.0057 as B ,字段A+(字段A*0.0057) as C FROM TABLENAME;

  • 朝赟丶 朝赟丶(提问者) 然后呢?第二行要怎么办?你这么写同一列就是一个值
    2020-11-12 18:43 
最佳回答
0
沉默的反补Lv6中级互助
发布于2020-11-12 18:10(编辑于 2020-11-12 18:10)

=

最佳回答
0
用户P0992005Lv5见习互助
发布于2020-11-13 13:24(编辑于 2020-11-13 14:13)

不会oracle,但是我觉得我写的sql是标准sql,您可以试试


select id,cola,cola*colb,cola*(1+colb) from t1 where id=1

union

select id,cola*power((1+colb),id),cola*power((1+colb),id)*colb,cola*power((1+colb),id)*(1+colb) from t1 where id>1

效果可以看图片。

未命名_副本.jpg


通过上述查询如果可以查出来,需要插入到一个表中,可能用oracle也是可以的


我把我的表T1发给你看看,我的表T1就是3个列。其中的值都是固定的。您的T2表,我的理解其实有点单纯:

如果id=1,则A列不变,B列不变,C列=A*(1+B)

如果id>1,则新A列=该行A列的值*powder(1+B列值,id),新B列=该行A列的值*powder(1+B列值,id)*该行B列的值,新C列=该行A列的值*powder(1+B列值,id)*(1+该行B列的值)

从你现在EXCEL表来看,由于T1表里面每行的内容其实是固定的,所以并不难。


这个看着很复杂,是要记住用select抽出的cola colb的值其实是T1表中的原始值,根据T2的逻辑进行计算而已。


实际上我再网上看到一个通过插入行累加的,才是需要用到子查询之类的解决的。(可供参考:https://blog.csdn.net/dinggu8857/article/details/102424270?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase)

未命名_副本1.jpg


  • 朝赟丶 朝赟丶(提问者) 我想了一下其实是个数列: A_1即第1行的A值,B同理 n即是行号,rownum或者说你这里的id 第n行是 第n+1个值 记为A_(n+1) A_(n+1) = A_1 * (1+t)^n 本来到这就结束了,但是我还有一个数列要加入计算,结果就有点麻烦了 A_(n+1) = A_1 * (1+t)^n - [B_1 * (1+t)^(n-1) + B_2 * (1+t)^(n-2) + ... + B_n * (1+t)^0] 单看A时已经可以直接表示了,做个connect by就可以直接生成结果列了; 现在问题就出现在后面的B列,不知道怎么用sql公式表示出来。
    2020-11-13 14:01 
  • 6关注人数
  • 553浏览人数
  • 最后回答于:2020-11-13 15:03
    请选择关闭问题的原因
    确定 取消
    返回顶部