- 我有一个表格,它包含每日小时星期一,我有一个计算并返回每周总数的函数。我总结了这些基于当前周和分区由element_id和start_date调用结果WEEK_HRS_TOTAL。
这会导致每周的总数。DENSE_RANK()的结果可以在当前select语句的SUM中使用
SUM(GENERATED_FOR_WEEK(et.START_DATE, et.END_DATE, elm.element_id, MON...SUN_)) OVER(PARTITION BY elm.element_id, et.START_DATE)as WEEK_HRS_TOTAL
我也有在该选择酷似上面的一个除了该和与总年度的WEEK_HRS_TOTAL另一个求和函数。从而导致每个参赛项目的总跑步总数。然而,在这个和我在elm.Name和子元素名称elm.SubName分区和恢复作为HRS_TOTAL_YEAR
SUM(GENERATED_FOR_YEAR(et.START_DATE,et.END_DATE,elm.element_id,MON ... SUN_)) OVER(PARTITION BY elm.Name,elm.SubName)作为HRS_TOTAL_YEAR
这样做的结果,但如预期的问题是总将显示每个记录,需要它来显示运行总计工作。
例子:
ELM NAME ELM SUB_NAME WEEK_HRS_TOTAL HRS_TOTAL_YEAR
DOOR KNOB 12 37
DOOR KNOB 23 37
DOOR KNOB 2 37
DOOR PAINT 3 10
DOOR PAINT 4 10
DOOR PAINT 3 10
我会尝试使用
DENSE_RANK生产基础上,elm.SubName给
ELM NAME ELM SUB_NAME WEEK_HRS_TOTAL RANK HRS_TOTAL_YEAR
DOOR KNOB 12 1 37
DOOR KNOB 23 1 37
DOOR KNOB 2 1 37
DOOR PAINT 3 2 10
DOOR PAINT 4 2 10
DOOR PAINT 3 2 10
列有没有办法让我的HRS_TOTAL_YEAR要使用RANK列而不是ELM SUB_NAME创建运行总数,导致以下情况?
ELM NAME ELM SUB_NAME WEEK_HRS_TOTAL RANK HRS_TOTAL_YEAR
DOOR KNOB 12 1 12
DOOR KNOB 23 1 35
DOOR KNOB 2 1 37
DOOR PAINT 3 2 3
DOOR PAINT 4 2 7
DOOR PAINT 3 2 10
Create or Replace "WEEK_HRS_TOTAL" (p_start_date et.start_date%type,
p_end_date et.end_date%type,
p_elm_id elm.element_id,
p_sun_hrs et.sun_hrs
.....this continues for each day of the week) Return Number AS
lv_dollar_gen_sum number;
lv_start_date date;
lv_end_date date;
lv_rate elm.rate%type;
begin
loop
exit when lv_start_date >= lv_end_date;
select r.rate into lv_rate
from hour_rate r
where r.element_id = p_element_id and
r.start_date <= lv_start_date and
r.end_date > lv_start_date;
lv_dollar_gen_sum := lv_dollar_gen_sum + (p_mon_hrs * lv_rate);
lv_start_date := lv_start_date + 1;
我们在一周的每一天都这样做,然后返回结果。这两个函数做同样的事情,但是对于WEEKS_HRS_TOTAL函数调用分区是基于element_id和et.start_date
虽然对于HRS_TOTAL_YEAR分区是基于elm.Name,elm.SubName
如果使用SUM()作为具有PARTITION BY子句但没有ORDER BY子句的分析函数,则会得到您注意到的行为。添加一个ORDER BY子句,你将得到一个运行总和。 (如果您通过可能有重复项的列或表达式进行排序,则可能还需要一个窗口子句,或向ORDER BY添加更多条件。) – mathguy
我将根据请求更新帖子。 – Bman
是否可以通过分区的顺序声明以下结果:DENSE_RANK()OVER(ORDER BY elm.Name))? – Bman