【发布时间】:2019-01-08 15:24:39
【问题描述】:
我一直在研究这个简单的小sn-p 代码一天,但找不到导致错误的问题。正如标题所述,我在尝试执行以下代码时收到错误ORA-00905 Missing Keyword:
SELECT DISTINCT DM.DESCRIPTION AS "AGENCY",
DM.DEPT_NO AS "DEPT NO",
CASE
WHEN VMP.RESERVE_DT IS NULL THEN
NULL
ELSE
VMP.RESERVE_DT
END AS "RESV_DT",
CASE
WHEN VMP.EST_PICKUP_DT IS NULL THEN
NULL
ELSE
VMP.EST_PICKUP_DT
END AS "EST_PKUP_DT",
CASE
WHEN VMP.EST_RETURN_DT IS NULL THEN
NULL
ELSE
VMP.EST_RETURN_DT
END AS "EST_RETN_DT",
VMP.EMP_NAME AS "EMPL_NAME",
VMP.UNIT_NO AS "UNIT_NUMBER",
VMP.RENTAL_CLASS_DESCRIPTION AS "RENT_CLS",
VMP.MP_TICKET_NO AS "MP_TKT_NO"
FROM DEPT_MAIN DM
INNER JOIN VIEW_MPOOL VMP ON VMP.DEPT_ID = DM.DEPT_ID
WHERE CASE
WHEN VMP.EST_PICKUP_DT IS NULL THEN
NULL
ELSE
TRUNC(VMP.EST_PICKUP_DT) = TRUNC(SYSDATE)
END
GROUP BY DM.DESCRIPTION,
DM.DEPT_NO,
CASE
WHEN VMP.RESERVE_DT IS NULL THEN
NULL
ELSE
VMP.RESERVE_DT
END,
CASE
WHEN VMP.EST_PICKUP_DT IS NULL THEN
NULL
ELSE
VMP.EST_PICKUP_DT
END,
CASE
WHEN VMP.EST_RETURN_DT IS NULL THEN
NULL
ELSE
VMP.EST_RETURN_DT
END,
VMP.EMP_NAME,
VMP.UNIT_NO,
VMP.RENTAL_CLASS_DESCRIPTION,
VMP.MP_TICKET_NO
ORDER BY CASE
WHEN VMP.EST_PICKUP_DT IS NULL THEN
NULL
ELSE
VMP.EST_PICKUP_DT
END ASC
此代码的基础是通过一个临时报告程序生成的,并且最初是完全合格的。我去掉了无关的引号并分配了表别名来清理它。虽然我希望这些努力能帮助我找到问题,但我找不到原因。感谢您的考虑。
【问题讨论】:
-
你很少在 GROUP BY 时不需要做 SELECT DISTINCT。
-
添加一些示例表数据和预期结果 - 全部作为格式化文本,而不是图像。先看看stackoverflow.com/help/mcve。
-
你的CASE表达式没用:
CASE WHEN VMP.RESERVE_DT IS NULL THEN NULL ELSE VMP.RESERVE_DT END和VMP.RESERVE_DT一样。
标签: sql oracle date case where-clause