HANA While 循环
HANA While Loop
我有一个要求,我认为有一个可能的解决方案,但我想先验证它以确保它是最好的方法。
当前有一个视图需要添加 2 个新字段。第一个字段将以任何一天都不会超过 24 的方式展开。分配将从开始日期开始,并在每个日历日继续进行,直到所需的小时数全部用完。机器使用的每一天都会创建一个新的日期条目。
例如,一台机器需要 80 个小时才能完成一个零件。新的输出将创建 4 条相同的记录,但新的日期和时间必填字段除外,如下所示。
Date
Hours required
June 1
24
June 2
24
June 3
24
June 4
8
我的想法是创建一个 table 函数并使用 while 循环不断检查具有所需小时数的当前字段并检查其是否大于 0 并减去 24 直到它小于 24 in这将是最后的条目。每次循环时,它还会将开始日期增加 1 天。然后我会将 table 函数放在图形视图中,然后前端可以使用它。
如有任何反馈,我们将不胜感激!
假设您的 table 具有以下结构:
CREATE COLUMN TABLE "MachineCapacityHrs"(
"Machine" nvarchar(10),
"TotalHoursRequired" int,
"StartDate" date
)
然后您可以在 table 函数中使用以下语句生成所需的日期和时间,而无需使用循环:
select e."Machine",e."TotalHoursRequired",e."StartDate",
t.date_sql as "DateSequence" ,
case when e."EndDate"<>t.date_sql then 24 else "Hrs" end as "HrsRequired"
from
( select "Machine","TotalHoursRequired","StartDate",
add_days("StartDate",case when floor("TotalHoursRequired"/24)=0 then 0
else floor("TotalHoursRequired"/24) end
) as "EndDate",
floor("TotalHoursRequired"/24) as "Days",
mod("TotalHoursRequired",24) as "Hrs",
case when mod("TotalHoursRequired",24) >0 then floor("TotalHoursRequired"/24)+1 else floor("TotalHoursRequired"/24) end as "DateCount"
from "MachineCapacityHrs"
)e left outer join ( select date_sql from _sys_bi.m_time_dimension
)t on t.date_sql between e."StartDate" and e."EndDate"
结果:
enter image description here
我有一个要求,我认为有一个可能的解决方案,但我想先验证它以确保它是最好的方法。
当前有一个视图需要添加 2 个新字段。第一个字段将以任何一天都不会超过 24 的方式展开。分配将从开始日期开始,并在每个日历日继续进行,直到所需的小时数全部用完。机器使用的每一天都会创建一个新的日期条目。
例如,一台机器需要 80 个小时才能完成一个零件。新的输出将创建 4 条相同的记录,但新的日期和时间必填字段除外,如下所示。
Date | Hours required |
---|---|
June 1 | 24 |
June 2 | 24 |
June 3 | 24 |
June 4 | 8 |
我的想法是创建一个 table 函数并使用 while 循环不断检查具有所需小时数的当前字段并检查其是否大于 0 并减去 24 直到它小于 24 in这将是最后的条目。每次循环时,它还会将开始日期增加 1 天。然后我会将 table 函数放在图形视图中,然后前端可以使用它。
如有任何反馈,我们将不胜感激!
假设您的 table 具有以下结构:
CREATE COLUMN TABLE "MachineCapacityHrs"(
"Machine" nvarchar(10),
"TotalHoursRequired" int,
"StartDate" date
)
然后您可以在 table 函数中使用以下语句生成所需的日期和时间,而无需使用循环:
select e."Machine",e."TotalHoursRequired",e."StartDate",
t.date_sql as "DateSequence" ,
case when e."EndDate"<>t.date_sql then 24 else "Hrs" end as "HrsRequired"
from
( select "Machine","TotalHoursRequired","StartDate",
add_days("StartDate",case when floor("TotalHoursRequired"/24)=0 then 0
else floor("TotalHoursRequired"/24) end
) as "EndDate",
floor("TotalHoursRequired"/24) as "Days",
mod("TotalHoursRequired",24) as "Hrs",
case when mod("TotalHoursRequired",24) >0 then floor("TotalHoursRequired"/24)+1 else floor("TotalHoursRequired"/24) end as "DateCount"
from "MachineCapacityHrs"
)e left outer join ( select date_sql from _sys_bi.m_time_dimension
)t on t.date_sql between e."StartDate" and e."EndDate"
结果: enter image description here