物化视图中的动态计算
Posted
技术标签:
【中文标题】物化视图中的动态计算【英文标题】:Dynamic calculations in a materialized view 【发布时间】:2011-08-11 20:45:33 【问题描述】:我有一个问题,我创建了一个完美运行的物化视图。但是现在我需要对视图中的数据进行一些计算。该视图包含在不同项目中工作的员工的工作时间。每个项目都有固定的时间(time_available),员工必须在其中完成项目。我将工作时间汇总到一个月,以便更好地展示。我在这里要完成的是“项目固定金额”减去员工“工作时间”的“简单”减法。 这里的问题是某些项目的持续时间超过一个月。自然,我所有的值每个月都在一个元组中。因此,当我有 3 个月的项目工作时间时,我的视图如下所示:
MV_Working_Hours:
Project --- Time_Available --- DATE --- Employee --- Working Days
Project A --- 50 Days --- 2011-05 --- Mr. A --- 15 Days
Project A --- 50 Days --- 2011-06 --- Mr. A --- 16 Days
Project A --- 50 Days --- 2011-07 --- Mr. A --- 16 Days
我想做的是像这样计算剩余天数:
Project --- Time_Available --- DATE --- Employee --- Working d in Month ---remaining days
Project A --- 50 Days --- 2011-05 --- Mr. A --- 15 Days --- 35 Days
Project A --- 50 Days --- 2011-06 --- Mr. A --- 16 Days --- 19 Days <--- I get here 34 which is for my need wrong !!!
Project A --- 50 Days --- 2011-07 --- Mr. A --- 16 Days --- 3 Days
有没有办法用“just” sql 来实现这一点,还是我必须在 OWB 中使用 pl/sql?我使用的是 OWB 版本 11gR2
谢谢
【问题讨论】:
您好,我遇到了问题。我使用 sql 开发人员。当我运行 sql 语句时,我的值是正确的。但是当我使用语句或视图创建表时,值是错误的。这个问题的原因可能是什么?有什么建议么? THX 【参考方案1】:您应该能够使用分析函数来生成运行总计。类似的东西
SELECT project,
time_available,
date_column,
employee,
working_days_in_month,
time_available -
sum(working_days) over (partition by project
order by date) remaining_days
FROM mv_working_hours
【讨论】:
感谢您的快速回答。您的解决方案完美运行。 好的,新视图的实现有问题。创建视图或表时得到错误的结果。当我在 sql developer 中执行语句时,值是正确的。可能导致此错误的原因。【参考方案2】:您应该能够使用分析 SQL 函数来做到这一点。
11gR2 http://download.oracle.com/docs/cd/E14072_01/server.112/e10810/analysis.htm
SUM( "Working Days" )
OVER (PARTITION BY "Project", "Employee"
ORDER BY "DATE"
ROWS UNBOUNDED PRECEDING)
您应该能够从"Time_Available"
中减去它(您可能会返回负值,用零替换那些也可以在 SQL 中处理)
顺便说一句,我忍不住喜欢你为结果选择的标题..."reaming days"
根据项目的不同,A 先生可能会觉得栏目标题合适且合理。
【讨论】:
嗨,谢谢你的快速回答。您的解决方案完美运行!我真的很喜欢你对我的命名的评论:)一个小错字和“戏剧性”的事情机会:P thx again以上是关于物化视图中的动态计算的主要内容,如果未能解决你的问题,请参考以下文章