我正在努力将此greatest()
oracle函数转换为ANSI SQL ..
SELECT sum( case when table1.sale_Id Is Null And
table2.status In ('D1','E1','P1') And
table3.Code In ('A','B','C') Then
(Case When (Greatest(table2.date1),table4.CALENDAR_DATE) <=
Least(table3.date1),(table4.CALENDAR_DATE+(Nvl(table1.YEAR_PERCENTAGE,100)/100*365)-1)) ) Then
Round((table1.AMT/Round((nvl(table1.YEAR_PERCENTAGE,100)/100*365),2))*
((Least(table3.date1),(table4.CALENDAR_DATE+(nvl(table1.YEAR_PERCENTAGE,100)/100*365)-1))+1)-
(Greatest(table2.date1),table4.CALENDAR_DATE) )),2) End)End)
FROM
table1,
table2,
table3,
table4
WHERE
( table1.b_key=table2.c_key )
AND ( table1.d_key=table3.f_key )
AND ( table1.g_key=table4.h_key )
答案 0 :(得分:0)
无论如何,在上面的例子中没有正确使用:
Greatest(table2.date1)
Greatest用于列表。如果您的列表中只有1个项目,那么最大的元素就是该项目。所以在这种情况下,您可以将其替换为:
table2.date1
最少以同样的方式工作。这些是内部操作并从该行中获取多个参数(与它们的MAX / MIN对应物不同)。