嗨,我需要帮助来理解类似于以下内容的查询的解码部分。
SELECT ax.animal_code
FROM raw_animal_xref ax,
animal_xref_type axt
WHERE ax.animal_mnemonic = l_animal_mnemonic -- Example 'COUGAR'
AND ax.animal_code_type = axt.animal_code_type
ORDER BY DECODE (animal_type,
l_type_to_be_matched, -1, -- Example 'CATS'
l_current_type, 0, -- Example 'BIG CATS'
nvl(axt.type_search_priority, 100)) ASC; -- EXAMPLE 'Big Cats' Priority is 1
由于此查询仅返回 1 个查询,因此我对 ORDER BY 如何与 DECODE 提供的不同的不存在的列号一起工作感到有些困惑。给定动物助记符、当前动物类型和要匹配的类型,该查询用作光标以查找相关动物的唯一代码。
我认为 DECODE 将不同的列号返回给 ORDER BY,我尝试在其他一些表上尝试不同的简单单列选择,ORDER by '-1'、'0' 和 '100' 和 ORDER by 似乎0 和 100 失败。为什么它适用于 -1 或任何其他数字?
希望有人可以向我解释这一点。谢谢!
最佳答案
它创建将用于排序的集合。
如果animal_type = l_type_to_be_matched,使用-1 作为该行的排序值
否则如果animal_type = l_current_type,则使用0作为该行的排序值
否则如果 axt.type_search_priority 为空,则使用 100 作为该行的排序值
否则使用 axt.type_search_priority 作为该行的排序值。
它给出了一种条件排序标准。通常用于确保某些项目始终位于已排序集合的顶部或底部。
关于oracle - ORDER BY DECODE(BLAH, [COLUMN NUMBER]) 在单列查询上。它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293238/