我对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。
任何人都可以建议我,或者可以按照我的要求订购这样的订单。
答案 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