按顺序子句PL SQL CASE

时间:2014-05-29 15:17:01

标签: sql oracle plsql sql-order-by case

我试图在SQL的Order By子句中使用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 个答案:

答案 0 :(得分:3)

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

对于后者:

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

我更改了then值以引用类名而不是常量。如果你按常数排序,那么输入是什么并不重要。