ORACLE SQL到ANSI SQL转换问题

时间:2018-04-07 12:02:39

标签: sql oracle

我正在努力将此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  )

1 个答案:

答案 0 :(得分:0)

无论如何,在上面的例子中没有正确使用:

Greatest(table2.date1)

Greatest用于列表。如果您的列表中只有1个项目,那么最大的元素就是该项目。所以在这种情况下,您可以将其替换为:

table2.date1

最少以同样的方式工作。这些是内部操作并从该行中获取多个参数(与它们的MAX / MIN对应物不同)。