oracle - ORDER BY DECODE(BLAH, [COLUMN NUMBER]) 在单列查询上。它是如何工作的?

标签 oracle select decode

嗨,我需要帮助来理解类似于以下内容的查询的解码部分。

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/

相关文章:

oracle - 使用sql将行转换为列,反之亦然 - oracle

oracle - PL/SQL错误: PLS-00103: Encountered the symbol “EXCEPTION”

mysql - 使用表单将一个mysql表中的数据插入到另一个mysql表中

mysql尝试使用多个条件进行选择

SQL Oracle : Replace an empty result with word

plsql - 如何在 PL SQL 中检查解码函数内的 2 个表达式

json - 解码 Vapor 中的对象数组

java - 从数据库序列中获取下一个值

mysql - 表连接顺序会影响查询结果吗?

sql - Redshift 中的 Base64 解码