2014-01-09 46 views
0

確定的領域特定的順序排序我有以下查詢(問題簡化版本)如何通過使用一個case語句

select case when pool_type in ('WN','PL','SH','EX','QN') 
    then pool_type else 'Other' end as pooltype, 
sum(wagered) 
from wageringactivitytable 
group by case when pool_type in ('WN','PL','SH','EX','QN') 
then pool_type else 'Other' end 

我要訂購按特定順序的結果(WN, PL,SH,EX,QN,其他)這是甚至有可能給我建立我的SQL查詢的方式?

我嘗試過使用另一個case語句(如'case pool_type when'WN',然後1'PL'then 2等等。)但是這樣做不起作用,因爲pool_type在order by子句中無效因爲它既不在agregate函數或group by子句包含....

我試過指的列的位置,而不是它的名字,但在這種情況下,順序完全被忽略..

case 1 when 'WN' then 1 
when 'PL'then 2 
.... 

when 'Other' then 6 

end 

回答

1

要做到這一點的一種方法是用這樣的外部查詢:

SELECT * 
FROM (
    select case when pool_type in ('WN','PL','SH','EX','QN') 
     then pool_type else 'Other' end as pooltype, 
    sum(wagered) 
    from wageringactivitytable 
    group by case when pool_type in ('WN','PL','SH','EX','QN') 
    then pool_type else 'Other' end 
) T 
ORDER BY 
    CASE WHEN pooltype = 'WN' THEN 1 
     WHEN ... 
    END 

另一種方式做,這是造一個配偶幫助臺...如

pooltypeorderer 
pooltype poolorder 
WN  1 
PL  2 
etc 

然後你加入到該表和組雙方pool_type和pool_order

我喜歡第二種選擇,因爲它是易於維護,您可以在不更改代碼的情況下更改訂單(或添加新類型)。它確實使查詢看起來更復雜一點(因爲它有一個額外的連接)。

+0

我想過這個選項。我可能最終會這樣做(在這種情況下,我會接受你的答案) – MrVimes

+0

@MVVimes - 請參閱選項2! :D – Hogan

+0

謝謝。我確實看過選項2.爲了我的直接目的,我選擇了選項1,但爲了便於維護,我將考慮更改爲選項2 – MrVimes