暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 创建一个视图,将行动态转换为列

askTom 2017-09-13
239

问题描述

我有一个关于视图创建的问题。

这是我的问题:

我需要使用一个视图生成一个报告,该视图从两个表中获取数据,例如Table_A和Table_B。

表 _a中的示例数据:

empno  empname  elem_name
---------------------------------------
1      abc       Basic_Salary
1      abc        Medical_Bill
2      xyz         Basic_Salary
2      xyz       Medical_Bill


注意: Element_name应该动态传递 (我有大约50个element_names)

表 _b中的示例数据:

Empno Basic_Salary Medical_Bill
--------------------------------
1      20000        500
2      50000        500

现在,我的预期结果是

输出:

Empno   Empname   effective_date   Basic_Salary   Medical_bill  Total_sum
--------------------------------------------------------------------------
1       abc        13-jun-2016      60000           1500         61500
2       xyz         5-may-2017      150000           1500        151500

注1:

我通过传递季度报告或月度报告等参数来生成报告。

假设在这里,我需要一份3个月详细信息的报告,然后我需要将一名员工的基本工资相加。,20k,这是60000的产出。同样,医疗账单也是如此。

请帮助我。

非常感谢!

专家解答

我不明白table_a是怎么进来的?或者你从哪里得到有效日期?

如果要将table_b中的值累加N次,请交叉联接到N行表中。然后按员工id或其他方式分组,并汇总值:

with emps as (
  select 1 id, 20000 sal, 500 med from dual union all
  select 2 id, 50000 sal, 500 med from dual 
), rws as (
  select level rw from dual 
  connect by level <= 3
)
  select id, sum(sal), sum(med), sum(sal+med) 
  from   emps
  cross join rws
  group  by id;

ID  SUM(SAL)  SUM(MED)  SUM(SAL+MED)  
1   60000     1500      61500         
2   150000    1500      151500  


或者你可以将一切乘以N:

with emps as (
  select 1 id, 20000 sal, 500 med from dual union all
  select 2 id, 50000 sal, 500 med from dual 
)
  select id, sal*3, med*3, (sal+med)*3
  from   emps;

ID  SAL*3   MED*3  (SAL+MED)*3  
1   60000   1500   61500        
2   150000  1500   151500 


但不知何故,我怀疑这两个都不是你真正想要的...

如果是这样,请给我们更多的合作。即:

-创建表格
-数据形式为 “插入表...”
-完整描述您要执行的操作。你在传递什么价值观?怎么做?根据您给出的数据,这些值的结果应该是什么?如果你传递不同的值会发生什么?
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论