在这一点上,我正试图将以下访问查询转换为oracle。
我现在遇到的错误是SQL Error: ORA-00907: missing right parenthesis
,尽管可能是其他原因造成的?
如果我完全删除IIf行,我仍然会遇到相同的错误。
SELECT Table01.Land
FROM Table01
RIGHT JOIN (Table02
RIGHT JOIN ((Table03
LEFT JOIN Table04 ON Table03.ARTNR = Table04.ARTNR)
LEFT JOIN Table05 ON Table03.ARTNR = Table05.ARTNR) ON Table02.Vertreter = Table05.VERTRNR) ON Table01.Land = Table05.LAND
答案 0 :(得分:1)
将联接放在一起的唯一方法是基于您提供的关系。
FROM Table01
LEFT JOIN Table05 ON Table01.Land = Table05.LAND
RIGHT JOIN Table02 ON Table02.Vertreter = Table05.VERTRNR
RIGHT JOIN Table03 ON Table03.ARTNR = Table05.ARTNR
LEFT JOIN Table04 ON Table03.ARTNR = Table04.ARTNR
答案 1 :(得分:1)
在您的查询中,主表为Table03
。通过它,您可以对其他表执行一系列外部联接。将联接转换为Oracle的最简单方法是:
SELECT
Table03.KONZERN, Table05.FIRMNR, Table05.ARTNR, Table05.FORM,
Table05.Au, Table05.PRKW, Table05.LFKW, Table05.KNDKBZ,
Table05.AUFTRNR, Table05.LIEFNR, Table05.LAND, Table05.GAT,
Table05.KOMMI, Table05.TRNR, Table05.KNDNR, Table04.PlaZ,
Table03.GF, Table04.GP, Table05.ARTNR2, Table05.von_AF,
Table04.EU, Table04.NA,
-- the following line needs to be changed to: CASE WHEN ELSE END
IIf(Table01.Land_2, IIf(Table02.Vertreter>="0", Vertreter_Land,Land_2)) AS LAND2,
Table01.Land, Table02.Vertreter_Land
FROM Table03
LEFT JOIN Table04 ON Table03.ARTNR = Table04.ARTNR
LEFT JOIN Table05 ON Table03.ARTNR = Table05.ARTNR
LEFT JOIN Table02 ON Table02.Vertreter = Table05.VERTRNR
LEFT JOIN Table01 ON Table01.Land = Table05.LAND
注意:我真的不知道IIF()
函数是如何工作的。您很有可能可以用SQL中的标准CASE WHEN END
替换它。