2014-01-21 80 views
0

我對sql存儲過程有奇怪的要求。我有rqst,key和keyType表。 Rqst表列保存不同主表的FK,如status,requesType和processType。密鑰表將rqstId作爲FK保存在一列中。 keyType是密鑰表中使用的主表。是否可以使用SQL將值傳遞給order by子句?

我的DAT看起來有些這樣的事
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.it沒有工作。

我的預期了將

KeyValue rqstId orchiveId 
9586  10125 c1235a 

我使用的Oracle此書面方式我的SQL。

任何人都可以建議我或有可能在我的要求中有這樣的順序。

+0

SQL服務器,MySQL? – Mihai

+0

你還可以顯示*期望的輸出*嗎? –

+1

'(從keyTypeId = 2的key中選擇不同的keyTypeId)''會得到'2',所以基本上你想'ORDER BY 2'? – marekful

回答

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 
+0

編輯以 選擇b.KeyValue, a.rqstId, a.orchiveId 從RQST一個,密鑰B,關鍵字類型Ç 其中a.statusId = 102 和a.requestType = 4 和a.processTypeId = 5 和b.rqstId = a.rqstId 和c.KeyTypeId = b.keyTypeId 按c.KeyTypeName ='key2'的順序排列然後0 else 1 end; 我能夠看到結果以key2開頭,其次是其他鍵。非常感謝。我想感謝大家的時間和努力。 – user1268890