select
case status
when 'AR' then 1
when 'AV' then 2
when 'AN' then 3
when 'AD' then 4
when 'AC' then 5
when 'AY' then 6
when 'AH' then 7
else 8
end 'status_order', COUNT(*)
from dn_appeal_request
group by
case status
when 'AR' then 1
when 'AV' then 2
when 'AN' then 3
when 'AD' then 4
when 'AC' then 5
when 'AY' then 6
when 'AH' then 7
else 8
end
有没有办法在不使用select?
中使用的相同case语句的情况下进行分组答案 0 :(得分:1)
您可以通过使用子查询来避免重复您的案例陈述。您需要对值进行分组。
select D.status_order, COUNT(*)
from (
select case status
when 'AR' then 1
when 'AV' then 2
when 'AN' then 3
when 'AD' then 4
when 'AC' then 5
when 'AY' then 6
when 'AH' then 7
else 8
end 'status_order'
from dn_appeal_request
) as D
group by D.status_order
答案 1 :(得分:0)
不,在上面的示例中,没有办法避免GROUP BY子句中的CASE。
如果你绝对不想重复自己,你可以做的解决方法是创建派生表:
SELECT CASE [Status] when 'AR' then 1
when 'AV' then 2
when 'AN' then 3
when 'AD' then 4
when 'AC' then 5
when 'AY' then 6
when 'AH' then 7
else 8
END AS status_order
,Total
FROM (
SELECT [Status], COUNT(*) AS Total
FROM dn_appeal_request
GROUP BY [Status]
) AS Foo