sql - HANA While 循环

标签 sql while-loop hana

我有一个要求,并且我认为有一个可能的解决方案,但我想先验证它以确保它是最佳方法。

当前有一个 View 需要添加 2 个新字段。第一个字段将以这样的方式展开,即没有哪一天超过 24。分配将从开始日期开始,并持续每个日历日,直到完全消耗完所需的时间。机器使用的每一天都会输入一个新的日期。

例如,一台机器需要 80 小时才能完成一个零件。除了新的日期和时间必填字段之外,新输出将创建 4 条相同的记录,如下所示。

<表类=“s-表”> <标题> 日期 所需时间 <正文> 6 月 1 日 24 6 月 2 日 24 6 月 3 日 24 6 月 4 日 8

我的想法是创建一个表函数并使用 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"

结果: enter image description here

关于sql - HANA While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67593169/

相关文章:

http - 了解 OData 服务

SQL:对连续记录进行分组

mysql - 需要帮助选择不同的条目

shell - 使用条件分隔和计算列表中的元素数量

python - 忽略特定时间内的异常情况

mysql - 限制特定列sql hana的输出

MySQL 在连接表之间使用 IF 或 CASE 语句

java - 准备好的语句中的串联

python - 为什么这个 python while 循环缺少逻辑运算符?

sql - TOP 1 或 LIMIT 1 在相关子查询中不起作用 - SPS 11