我有以下查询(问题的简化版本)
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'时的数字,然后当'PL'然后是2等时为1)但这不起作用,因为pool_type在order by子句中无效,因为它既不包含在agregate函数中,也不包含在group by子句中....
我尝试引用列位置而不是它的名称,但在这种情况下,顺序完全被忽略..
case 1 when 'WN' then 1
when 'PL'then 2
....
when 'Other' then 6
end
答案 0 :(得分: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
加入该表和组我喜欢第二个选项,因为它易于维护,您可以在不更改代码的情况下更改顺序(或添加新类型)。它确实使查询看起来更复杂(因为它有一个额外的连接)。