select Property
,[18~20]=sum(case when old between 18 and 20 then 1 else 0 end)
,[21~25]=sum(case when old between 21 and 25 then 1 else 0 end)
,[26~30]=sum(case when old between 26 and 30 then 1 else 0 end)
,[31~35]=sum(case when old between 31 and 35 then 1 else 0 end)
,[36~40]=sum(case when old between 36 and 40 then 1 else 0 end)
,[41~45]=sum(case when old between 41 and 45 then 1 else 0 end)
,[46~50]=sum(case when old between 46 and 50 then 1 else 0 end)
,[51~55]=sum(case when old between 51 and 55 then 1 else 0 end)
,[56以上]=sum(case when old>55 then 1 else 0 end)
from(
select Property,old=datediff(year,BornDate,getdate())
from 人员信息表
) a
group by Property
问一下高手们,这里的case语句有没有办法写成类似下面这种形式:
case
datediff(year,BornDate,getdate())
when between 18 and 20 then '18~20'
when between 21 and 25 then '21~25'
...
end 年龄段
---------------------------------------------------
原case语句:
case
when datediff(year,BornDate,getdate()) between 18 and 20 then '18~20'
when datediff(year,BornDate,getdate()) between 21 and 25 then '21~25'
when datediff(year,BornDate,getdate()) between 26 and 30 then '26~30'
when datediff(year,BornDate,getdate()) between 31 and 35 then '31~35'
when datediff(year,BornDate,getdate()) between 36 and 40 then '36~40'
when datediff(year,BornDate,getdate()) between 41 and 45 then '41~45'
when datediff(year,BornDate,getdate()) between 46 and 50 then '46~50'
when datediff(year,BornDate,getdate()) between 51 and 55 then '51~55'
when datediff(year,BornDate,getdate())>=56 then '56以上'
end 年龄段,
case
when datediff(year,BornDate,getdate()) between 18 and 20 then '18~20'
when datediff(year,BornDate,getdate()) between 21 and 25 then '21~25'
when datediff(year,BornDate,getdate()) between 26 and 30 then '26~30'
when datediff(year,BornDate,getdate()) between 31 and 35 then '31~35'
when datediff(year,BornDate,getdate()) between 36 and 40 then '36~40'
when datediff(year,BornDate,getdate()) between 41 and 45 then '41~45'
when datediff(year,BornDate,getdate()) between 46 and 50 then '46~50'
when datediff(year,BornDate,getdate()) between 51 and 55 then '51~55'
when datediff(year,BornDate,getdate())>=56 then '56以上'
end 年龄段,
from 人员信息表 group by WorkModality,Property,
case
when datediff(year,BornDate,getdate()) between 18 and 20 then '18~20'
when datediff(year,BornDate,getdate()) between 21 and 25 then '21~25'
when datediff(year,BornDate,getdate()) between 26 and 30 then '26~30'
when datediff(year,BornDate,getdate()) between 31 and 35 then '31~35'
when datediff(year,BornDate,getdate()) between 36 and 40 then '36~40'
when datediff(year,BornDate,getdate()) between 41 and 45 then '41~45'
when datediff(year,BornDate,getdate()) between 46 and 50 then '46~50'
when datediff(year,BornDate,getdate()) between 51 and 55 then '51~55'
when datediff(year,BornDate,getdate())>=56 then '56以上'
end
case
when datediff(year,BornDate,getdate()) between 18 and 20 then '18~20'
when datediff(year,BornDate,getdate()) between 21 and 25 then '21~25'
when datediff(year,BornDate,getdate()) between 26 and 30 then '26~30'
when datediff(year,BornDate,getdate()) between 31 and 35 then '31~35'
when datediff(year,BornDate,getdate()) between 36 and 40 then '36~40'
when datediff(year,BornDate,getdate()) between 41 and 45 then '41~45'
when datediff(year,BornDate,getdate()) between 46 and 50 then '46~50'
when datediff(year,BornDate,getdate()) between 51 and 55 then '51~55'
when datediff(year,BornDate,getdate())>=56 then '56以上'
end 年龄段,
from 人员信息表 group by WorkModality,Property,
case
when datediff(year,BornDate,getdate()) between 18 and 20 then '18~20'
when datediff(year,BornDate,getdate()) between 21 and 25 then '21~25'
when datediff(year,BornDate,getdate()) between 26 and 30 then '26~30'
when datediff(year,BornDate,getdate()) between 31 and 35 then '31~35'
when datediff(year,BornDate,getdate()) between 36 and 40 then '36~40'
when datediff(year,BornDate,getdate()) between 41 and 45 then '41~45'
when datediff(year,BornDate,getdate()) between 46 and 50 then '46~50'
when datediff(year,BornDate,getdate()) between 51 and 55 then '51~55'
when datediff(year,BornDate,getdate())>=56 then '56以上'
end 年龄段
18-20:
select workmodality,property,count(*) as 人数,avg(datadiff(yy,borndate,getdate())) as 平均年龄 from 表 where datediff(yy,borndate,getdate())>=18 and datediff(yy,borndate,getdate())<=20 group by workmodality,property