sqlserver按年龄段统计人数
已知:现有一张职工信息表,职工编号,职工姓名,职工生日,公司编码
求:统计根据输入的公司编码统计改公司各年龄段的人数 年龄段分别为 30岁以下,31-35,36-45,46-55,56以上;
初始化数据如下;
CREATE TABLE lzy_test( [id] [int] NOT NULL, [name] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL, [birthday] [datetime] NULL, [school_code] [int] NULL, CONSTRAINT [PK_lzy_test] PRIMARY KEY CLUSTERED )
INSERT INTO lzy_test (id,name,birthday,school_code) VALUES (1,'name1',{ts '2010-01-01 00:00:00.'},1)GOINSERT INTO lzy_test (id,name,birthday,school_code) VALUES (2,'name2',{ts '1989-01-02 00:00:00.'},1)GOINSERT INTO lzy_test (id,name,birthday,school_code) VALUES (3,'name3',{ts '1978-02-07 00:00:00.'},1)GOINSERT INTO lzy_test (id,name,birthday,school_code) VALUES (4,'name4',{ts '1971-01-08 00:00:00.'},1)GOINSERT INTO lzy_test (id,name,birthday,school_code) VALUES (5,'name5',{ts '1990-09-09 00:00:00.'},1)GOINSERT INTO lzy_test (id,name,birthday,school_code) VALUES (9,'name9',{ts '1981-01-08 00:00:00.'},1)GOINSERT INTO lzy_test (id,name,birthday,school_code) VALUES (10,'name10',{ts '1992-08-07 00:00:00.'},2)GOINSERT INTO lzy_test (id,name,birthday,school_code) VALUES (11,'name11',{ts '1965-08-08 00:00:00.'},2)GOINSERT INTO lzy_test (id,name,birthday,school_code) VALUES (12,'name12',{ts '1960-08-08 00:00:00.'},2)GOINSERT INTO lzy_test (id,name,birthday,school_code) VALUES (13,'name13',{ts '1967-04-08 00:00:00.'},2)GO
解答问题:select school_code,(case((case(sign(convert(varchar(100),getdate()-DATEADD(year,datediff(year,h.personal_birthday,getdate()),h.personal_birthday),112)-19000101)) when 0 then datediff(year,h.personal_birthday,getdate())+1 when 1 then datediff(year,h.personal_birthday,getdate())+1 when -1 then datediff(year,h.personal_birthday,getdate()) end)-1)/5+1) when 1 then '30岁以下' when 2 then '30岁以下' when 3 then '30岁以下' when 4 then '30岁以下' when 5 then '30岁以下' when 6 then '30岁以下' when 7 then '31-35' when 8 then'36-45'when 9 then'36-45'when 10 then'46-55'when 11 then'46-55'else '56以上'end) as 年龄段, count(*) as 人数 from lzy_test group by (case(((case(sign(convert(varchar(100),getdate()-DATEADD(year,datediff(year,h.personal_birthday,getdate()),h.personal_birthday),112)-19000101)) when 0 then datediff(year,h.personal_birthday,getdate())+1 when 1 then datediff(year,h.personal_birthday,getdate())+1 when -1 then datediff(year,h.personal_birthday,getdate()) end)-1)/5+1) when 1 then '30岁以下' when 2 then '30岁以下' when 3 then '30岁以下' when 4 then '30岁以下' when 5 then '30岁以下' when 6 then '30岁以下' when 7 then '31-35' when 8 then'36-45'when 9 then'36-45'when 10 then'46-55'when 11 then'46-55'else '56以上' end ),school_code
原文章浏览量:4377
原文章分类:数据库
原文链接:https://www.iteye.com/blog/lizhiyu-740995