select '18-20',
count(case when age between 18 and 20 then 1 end) * 100.0 / count(*)
from employees
union all
select '26-40',
count(case when age between 26 and 40 then 1 end) * 100.0 / count(*)
from employees
SQL 小提琴示例 #1
您还可以编写一个稍微干净(更易于维护)的版本,如下所示:
select cast(r.Start as varchar(3)) + '-' + cast(r.[End] as varchar(3)),
count(case when e.age between r.Start and r.[End] then 1 end) * 100.0 / (select count(*) from employees)
from (
select 18 as Start, 20 as [End]
union all
select 21 as Start, 25 as [End]
union all
select 26 as Start, 40 as [End]
) r
left outer join employees e on e.age between r.Start and r.[End]
group by cast(r.Start as varchar(3)) + '-' + cast(r.[End] as varchar(3))
SQL 小提琴示例 #2