我希望我的UCO列显示数字1或2,其他任何我想要返回的实际数字,这可能是任何数字。但是由于我的case语句,它目前显示为NULL。
任何想法如何展示真实的人物?
SELECT S.STOPP_REAL_DELIVERY AS "Delivery Date",
case when C.COLLECT_COLLECTED_QTY = '-1' THEN '1'
when C.COLLECT_COLLECTED_QTY = '-2' THEN '2' END AS UCO
FROM MBR_COLLECT C,
MBR_STOPP S,
MBR_JOURNEY J
WHERE C.MARKET_CODE = 'UK'
AND C.COLLECT_TYPE_CODE = 4
AND C.STOPP_ID = S.STOPP_ID
AND J.JOURNEY_ID = S.JOURNEY_ID
AND J.JOURNEY_PLANNED_START >= '14-AUG-17';
答案 0 :(得分:3)
在ELSE
语句中添加CASE
子句:
SELECT S.STOPP_REAL_DELIVERY AS "Delivery Date",
CASE
WHEN C.COLLECT_COLLECTED_QTY = '-1' THEN '1'
WHEN C.COLLECT_COLLECTED_QTY = '-2' THEN '2'
ELSE C.COLLECT_COLLECTED_QTY
END AS UCO
FROM MBR_COLLECT C
INNER JOIN MBR_STOPP S
ON ( C.STOPP_ID = S.STOPP_ID )
INNER JOIN MBR_JOURNEY J
ON ( J.JOURNEY_ID = S.JOURNEY_ID )
WHERE C.MARKET_CODE = 'UK'
AND C.COLLECT_TYPE_CODE = 4
AND J.JOURNEY_PLANNED_START >= DATE '2017-08-14';
此外:
(+)
语法中的错误。'14-AUG-17'
不是日期文字 - 它是字符串文字。如果您将它与日期列进行比较,Oracle将尝试将其隐式转换为日期文字,但这将使用NLS_DATE_FORMAT
会话变量作为格式掩码来完成;此值设置为每用户会话,每个用户都可以更改自己的设置。如果您依赖于默认设置并且用户更改了它,那么您的查询将会中断(没有更改查询)该用户(并且没有其他人),并且调试将非常困难。使用ANSI日期文字而不是DATE '2017-08-14'
或明确说明格式掩码(如果您使用的是特定于语言的月份名称,则使用语言)TO_DATE( '14-AUG-17', 'DD-MON-RR','NLS_LANGUAGE="ENGLISH"' )
。