我有一个问题,我们需要根据不同的开始和结束日期计算一些变量,这些变量可以根据客户端进行更改。
目前,我已实施此解决方案如下: -
例如:
创建一个静态表:ref_table
列:training_start_date,training_end_date
值:ISB_START_DT和ISB_END_DT
即1排。
如果另一个客户想要使用其他日期,则创建此表,
值可以更改为
值:CS_START_DT和CS_END_DT
或任何东西
注意:此表一次只包含1行
使用的查询:
create table ref_table(training_start_date varchar(30), training_end_date
varchar(30);
insert into ref_table values('ISB_START_DT','ISB_END_DT')
现在,还有另一个sql查询,我们使用这个表并使用它来计算功能,在该查询中也有很多列和功能,但我给出了一个示例代码。
Sample Code:
Create or replace view prm_vw as
select s2.*,
case
when NewValue < 0 then null
else NewValue end as NewValue1
from (
select
s1.*,
case
when training_start_date = 'ISB_START_DT' and
training_start_date = 'ISB_END_DT'
then ISB_START_DT - ISB_END_DT
when training_start_date = 'CS_START_DT' and
training_start_date = 'CS_END_DT'
then CS_START_DT - CS_END_DT
end as NewValue
from (
select
AVG(date_to_calculate) OVER (PARTITION BY country) AS
ISB_START_DT,
AVG(date_to_calculate) OVER (PARTITION BY REGION) AS
CS_START_DT,
ISB_END_DT,
CS_END_DT
ref.*
from prm_cmop
cross join
ref_table ref
)s1
)s2
我已经通过上述方式实现了这一点,但我觉得这不是优化的方式,因为我仍在努力编码并检查training_start_date =&#39; ISB_START_DT&#39;因为我不能直接将代码作为
ISB_START_DT - ISB_END_DT由于NewValue为training_start_date - training_end_date,因为training_start_date包含列名ISB_START_DT,我对ISB_START_DT的列值感兴趣。此外,如果将来客户希望我们使用另一列,那么我必须再次更改我的视图脚本以包含在行的情况下。
请有人帮我解释实现这一目标的最佳方法。