有人能解释为什么在下面的条件下,coalesce在where子句中不起作用吗?在这种情况下,如何在不改变以下合并条件的情况下正确使用coalesce,并且仅针对sparted=y?
餐桌水果:
ITEM_NAME ITEM_NO SPOILED
Apples A15354 N
Bananas BYHUG1 N
Grapes GR0013 Y
Oranges ORULYE N
Guavas GUOIUW Y
查询:
select fruit.item_name
from fruit
where fruit.item_no = coalesce('A15354','CURR_NOT_IN_TABLE','GR0013','GUOIUW')
and fruit.spoiled = 'Y'
使用上面的查询不会返回任何内容。期望的产量应该是葡萄。
期望输出:
Grapes
2条答案
按热度按时间kuhbmx9i1#
我们可以用
ROW_NUMBER
在这里选择您需要的优先级:这里的想法是为每个损坏的项目分配一个从1到5的优先级。我们使用
ROW_NUMBER
生成总是以1作为最高可用优先级开始的序列。uttx8gqw2#
尽管@tim biegeleisen给出了一个关于如何解决业务问题的完美答案,但它并没有回答op提出的问题。
COALESCE
将返回参数列表中的第一个not null值。如果像这样传递nr个字符串,则值始终是第一个。通常将列作为参数传递,它将返回第一个not null列值最好的学习方法是反复使用查询和测试
那是因为
COALESCE
call only返回'a15354'。另一种测试方法是在select中包含该语句,如下所示:如您所见,它为每一行返回相同的值,这仅仅是因为第一个notnull值是字符串a15354。
COALESCE
不是解决你问题的办法,我希望这能解释一下。