我正在使用提供给我的桌子:
INP_PRODUCTS
因此INP_PRODUCT_CODE和INP_PRODUCT_TYPE列值可以为null。我正在尝试构建一个查询,其中最终用户是否提供" UNKNOWN"的值。关于ProductCode然后我想匹配该列的null 值。用户提供了多个ProductCodes作为输入参数。
其次,如果用户提供了ProductTypes列表,其中一个值为" UNKNOWN"那么我想匹配该列的空值。
下面是我构建的SQL,但结果没有按预期显示。我知道这个查询不正确。如果有人能指出我正确的方向,我感激不尽:
SELECT INP_PRODUCT_ID, NVL(INP_PRODUCT_CODE, 'UNKNOWN'), NVL(INP_PRODUCT_TYPE, 'UNKNOWN')
from INP_PRODUCTS where INP_PRODUCT_CODE IN('ABC', 'UNKNOWN', 'UUU') and INP_PRODUCT_TYPE in('CONSOLE','UNKNOWN','KITCHENAPPLIANCE')
我赞赏上面的建设性意见。
亲切的问候,
关于以上内容的更新!
我通过修改我的查询特别是我的where子句来实现它:
SELECT COALESCE(INP_PRODUCT_CODE,'UNKNOWN') as INP_PRODUCT_CODE,
COALESCE(INP_PRODUCT_TYPE, 'UNKNOWN') as INP_PRODUCT_TYPE
FROM INP_PRODUCTS
WHERE COALESCE(INP_PRODUCT_CODE,'UNKNOWN')
IN ('ABC','UNKNOWN', 'UUU') AND COALESCE(INP_PRODUCT_TYPE, 'UNKNOWN') IN('CONSOLE','UNKNOWN','KITCHENAPPLIANCE');
如果您认为我的上述查询不太正确,请回答我的问题并向我提供反馈。
谢谢!
答案 0 :(得分:0)
COALESCE子句从表达式列表中返回第一个non_null表达式。 请参阅:https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions023.htm
如果您只有1列te,请检查它是否为空,然后使用NVL语句。如果要检查更多列,请使用COALESCE,否则它们为空。
SELECT nvl(INP_PRODUCT_CODE,'UNKNOWN') as INP_PRODUCT_CODE,
nvl(INP_PRODUCT_TYPE, 'UNKNOWN') as INP_PRODUCT_TYPE
FROM INP_PRODUCTS
WHERE nvl(INP_PRODUCT_CODE,'UNKNOWN')IN ('ABC','UNKNOWN', 'UUU') ---> if you also want de prod-codes ABC and UUU
AND nvl(INP_PRODUCT_TYPE, 'UNKNOWN') IN ('CONSOLE','UNKNOWN','KITCHENAPPLIANCE'); ---> if you also want the types console and kitchenappliance