是否可以使用SQL将值传递给order by子句?

时间:2014-01-21 09:52:04

标签: sql oracle

我对sql存储过程有一些奇怪的要求。我有rqst,key和keyType表。 Rqst表列包含不同主表的FK,如status,requesType和processType。密钥表将rqstId保存为其中一列中的FK。 keyType是密钥表中使用的主表。

我的dats看起来像这样的事 RqstTable

rqstId appId statsId procesTypId requestType updtBy createDt  orchiveId
10125   3       102     5           4          Test    date    c1235a

keyTable

keyId rqstId keyTypeId KeyValue  
123   10125  2          9586  

KeyTypeTable

KeyTypeId KeyTypeName Description     
1           key1        key1des    
2           key2        key2des

我的要求是用户将提供这些输入字段status,requestType, processType and date。它应该是order by key3 from keyTypeTable

根据我的搜索,我们不能按顺序将值传递给列。根据文档,我们可以将表达式作为order by的一部分传递。我厌倦了scalr子查询,如

select * from rqst a,
left join key b on b.rqstId = a.rqstId
left join KeyType c on c.keyTypeId = b.KeyTypeId
where a.procesTypId = 5 and a.requestType = 4 and a.statsId = 102
order by KeyTypeName; -- but want some thing like KeyTypeName='key2'

但是结果与order by clause不同。它不起作用。

我的预期将是

KeyValue  rqstId  orchiveId   
9586      10125   c1235a 

我正在使用Oracle编写我的sql。

任何人都可以建议我,或者可以按照我的要求订购这样的订单。

1 个答案:

答案 0 :(得分:0)

试试这个:

select b.KeyValue,
       a.rqstId,
       a.orchiveId,
       case when c.KeyTypeName = 'key2' then 0 else 1 end as KeyTypeNameForOrder
  from rqst a, key b, keyType c
 where a.statusId = 102
   and a.requestType = 4
   and a.processTypeId = 5
   and b.rqstId = a.rqstId     
   and c.KeyTypeId = b.keyTypeId
 order by 4