我正在研究一个sql文件,试图制作一个脚本,该脚本可以显示所显示的表中的所有数据或表中的所有数据以及3个月的数据。我一直收到error 00905 missing keyword
的错误,我不明白为什么。
我查看了语法,这一切对我来说都是正确的。我会在它说错误发生的位置(在第一个内连接处)放置一个标记。我更改了所有表名,使其看起来更好,因为它超出了语法。
任何帮助都会非常感谢你。这只是代码的一部分,但我确信它必须在这里。
WHEN Table_typ_cde = '1' -- Pulling all data --
THEN
INNER JOIN Table acp ON Table_oid = Table_oid
INNER JOIN Table loss ON Table_oid = Table_oid
LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1
INNER JOIN Table brnch ON Table_OID = Table_oid
INNER JOIN Table a ON Table_OID = Table_oid
INNER JOIN Table c Table_OID = Table_oid
INNER JOIN Table s ON Table_OID = Table_oid
INNER JOIN Table r ON Table_OID = Table_oid
INNER JOIN Table grp ON Table_oid = Table_oid
INNER JOIN Table on Table_id = Table_id
WHERE Table_ID <> 2
WHEN Table_cde = '2' -- Pulling all data within the last 3 months along with all present data --
THEN
INNER JOIN Table acp ON Table_oid = Table_oid
INNER JOIN Table loss ON Table_oid = Table_oid
LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1
INNER JOIN Table brnch ON Table_OID = Table_oid
INNER JOIN Table a ON Table_OID = Table_oid
INNER JOIN Table c ON Table_OID = Table_oid
INNER JOIN Table s ON Table_OID = Table_oid
INNER JOIN Table r ON Table_OID = Table_oid
INNER JOIN Table grp ON Table_oid = Table_oid
INNER JOIN Table on Table_id = Table_id
WHERE Table_ID <> 2
AND df.DATE_CREATED BETWEEN ADD_MONTHS(SYSDATE, -6)
AND sysdate
END
) core
答案 0 :(得分:1)
您无法使用JOIN
打破CASE
。我在你的查询的某些部分看到过这个,
THEN
INNER JOIN Table acp ON Table_oid = Table_oid
INNER JOIN Table loss ON Table_oid = Table_oid
这是错误的,您必须在INNER JOIN
关键字之前提供表名。
答案 1 :(得分:0)
您有两组看似相同的联接。然后,您有一个日期过滤器,您希望有条件地应用它。您需要在WHERE子句中应用它而不是FROM。有些人喜欢这个
FROM ... INNER JOIN Table acp ON Table_oid = Table_oid
INNER JOIN Table loss ON Table_oid = Table_oid
LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1
INNER JOIN Table brnch ON Table_OID = Table_oid
INNER JOIN Table a ON Table_OID = Table_oid
INNER JOIN Table c ON Table_OID = Table_oid
INNER JOIN Table s ON Table_OID = Table_oid
INNER JOIN Table r ON Table_OID = Table_oid
INNER JOIN Table grp ON Table_oid = Table_oid
INNER JOIN Table on Table_id = Table_id
WHERE Table_ID <> 2
AND (Table_cde = '1'
or ( Table_cde = '2'
and df.DATE_CREATED BETWEEN ADD_MONTHS(SYSDATE, -6) AND sysdate ))