DENSE_RANK()的结果可以用在当前select语句的SUM中吗
Can the result of DENSE_RANK () be used in a SUM of the current select statement
- 我有一个 table 保存周一至周日的每日时间,我有一个计算和 return 每周总计的函数。我根据当前周对这些进行求和,并按 element_id 和 start_date 进行分区,调用结果 WEEK_HRS_TOTAL.
这会得出每周的总数。
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
我在这个 select 中还有另一个与上面的函数完全相同的求和函数,除了这个求和是计算当年 WEEK_HRS_TOTAL 的总和。因此,每个条目的培养总数为 运行。但是,在这个总和中,我按 elm.Name 和子元素名称 elm.SubName 和 return 划分为 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;
我们对一周中的每一天都这样做,然后 return 结果。这两个函数做同样的事情,但是 WEEKS_HRS_TOTAL 函数调用的分区基于 element_id 和 et.start_date
虽然 HRS_TOTAL_YEAR 的分区基于 elm.Name,elm.SubName
您只需将 ORDER BY
添加到 SUM()
。但是,您的数据没有明显的列:
SUM(GENERATED_FOR_YEAR(et.START_DATE, et.END_DATE, elm.element_id, MON...SUN_ )) OVER
(PARTITION BY elm.Name, elm.SubName
ORDER BY ??
) as HRS_TOTAL_YEAR
您显示的数据中没有任何内容符合您的要求。
- 我有一个 table 保存周一至周日的每日时间,我有一个计算和 return 每周总计的函数。我根据当前周对这些进行求和,并按 element_id 和 start_date 进行分区,调用结果 WEEK_HRS_TOTAL.
这会得出每周的总数。
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
我在这个 select 中还有另一个与上面的函数完全相同的求和函数,除了这个求和是计算当年 WEEK_HRS_TOTAL 的总和。因此,每个条目的培养总数为 运行。但是,在这个总和中,我按 elm.Name 和子元素名称 elm.SubName 和 return 划分为 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;
我们对一周中的每一天都这样做,然后 return 结果。这两个函数做同样的事情,但是 WEEKS_HRS_TOTAL 函数调用的分区基于 element_id 和 et.start_date
虽然 HRS_TOTAL_YEAR 的分区基于 elm.Name,elm.SubName
您只需将 ORDER BY
添加到 SUM()
。但是,您的数据没有明显的列:
SUM(GENERATED_FOR_YEAR(et.START_DATE, et.END_DATE, elm.element_id, MON...SUN_ )) OVER
(PARTITION BY elm.Name, elm.SubName
ORDER BY ??
) as HRS_TOTAL_YEAR
您显示的数据中没有任何内容符合您的要求。