按子句顺序排列的 PL SQL CASE

Posted

技术标签:

【中文标题】按子句顺序排列的 PL SQL CASE【英文标题】:PL SQL CASE in Order By Clause 【发布时间】:2014-05-29 15:17:00 【问题描述】:

我正在尝试在 SQL 的 Order By Clause 中使用 CASE 语句,但出现以下错误 预期 Char 得到 NUMBER.. 预期 Char 得到 DATE..

(CASE when inp='PAPER' then 'PAPERSTOCK'
 when inp='DOCS' then 30
 when inp='DATE' then SYSDATE
 else 'NOTHING')

这是我的问题..我知道 CASE 只会返回一种类型的数据类型..我有一个要求,根据输入 Order By Clause 应该更改.. CASE 语句应该返回 DATE/NUMBER/VARCHAR..

这是可能的还是我们有任何其他选择?

【问题讨论】:

我添加了有问题的示例数据。实际上它们不是常量,而是表格列。 【参考方案1】:

您返回了三种不同的数据类型。您有两种选择:将它们转换为兼容的格式(字符串)或使用多个 case 语句。

对于后者:

order by (CASE when inp = 'PAPER' then PAPERSTOCK end),
         (CASE when inp = 'DOCS' then DOCS end),
         (CASE when inp = 'DATE' then INPUTDATE end)

我更改了 then 值以引用列名之类的东西,而不是常量。如果您按常数排序,那么输入是什么都没有关系。

【讨论】:

以上是关于按子句顺序排列的 PL SQL CASE的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中ORDER BY 排序怎么使用?指定顺序和多字段排列

按子句顺序排列的 LINQ 动态表达式

按 SQL IN() 子句中的值顺序排序

SQL Query 总是按子句顺序使用文件排序

Oracle PL/SQL 查询顺序按 Distinct 问题

如何按 Oracle SQL IN() 子句中的值顺序对结果数据进行排序