我有一个要求,并且我认为有一个可能的解决方案,但我想先验证它以确保它是最佳方法。
当前有一个 View 需要添加 2 个新字段。第一个字段将以这样的方式展开,即没有哪一天超过 24。分配将从开始日期开始,并持续每个日历日,直到完全消耗完所需的时间。机器使用的每一天都会输入一个新的日期。
例如,一台机器需要 80 小时才能完成一个零件。除了新的日期和时间必填字段之外,新输出将创建 4 条相同的记录,如下所示。
我的想法是创建一个表函数并使用 while 循环来连续检查当前字段是否具有所需的小时数,并检查其是否大于 0 并减去 24 直到小于 24,这将是最终的入口。每次循环时,它还会将开始日期增加 1 天。然后我会将表函数放在图形 View 中,然后前端可以使用它。
如有任何反馈,我们将不胜感激!
最佳答案
假设您的表格具有以下结构:
CREATE COLUMN TABLE "MachineCapacityHrs"(
"Machine" nvarchar(10),
"TotalHoursRequired" int,
"StartDate" date
)
然后您可以在表函数中使用以下语句生成所需的日期和时间,而无需使用循环:
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"
关于sql - HANA While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67593169/