一个超难的 统计 问题

cleanclear0614 2005-11-29 09:45:53
我想针对一个出生日期 这个字段操作
实现以下SQL列表

年龄段 人数
20岁以下 。。
20-30 。。。
31-40 。。。
40-51 。。。
51-60 。。。
60岁以上 。。。

我想生成一个新的表,字段名称 为年龄段 ,人数
而新表的内容为:
20岁以下 。。
20-30 。。。
31-40 。。。
40-51 。。。
51-60 。。。
60岁以上 。。。

这些全部都是虚拟字段实现。人数为 各个年龄段的总数

在SQL 中请大家帮我实现。也可以在存储过程 中实现。!!!!
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
z_hp 2005-11-29
  • 打赏
  • 举报
回复
请参考:增加了列名。
select
(case
when datediff(yy,fddate,getdate())<20 then '20岁以下'
when datediff(yy,fddate,getdate())<31 then '21-30'
when datediff(yy,fddate,getdate())<41 then '31-40'
when datediff(yy,fddate,getdate())<51 then '41-50'
when datediff(yy,fddate,getdate())<61 then '51-60'
else '60岁以上'
end) as '年龄段',
count(*) as '人数'
from

group by
case
when datediff(yy,fddate,getdate())<20 then '20岁以下'
when datediff(yy,fddate,getdate())<31 then '21-30'
when datediff(yy,fddate,getdate())<41 then '31-40'
when datediff(yy,fddate,getdate())<51 then '41-50'
when datediff(yy,fddate,getdate())<61 then '51-60'
else '60岁以上'
end
子陌红尘 2005-11-29
  • 打赏
  • 举报
回复
select
isnull(case
when datediff(yy,出生日期,getdate())<20 then '20岁以下'
when datediff(yy,出生日期,getdate())<31 then '21-30'
when datediff(yy,出生日期,getdate())<41 then '31-40'
when datediff(yy,出生日期,getdate())<51 then '41-50'
else '60岁以上'
end,'总人数')
count(*)
from

group by
(case
when datediff(yy,出生日期,getdate())<20 then '20岁以下'
when datediff(yy,出生日期,getdate())<31 then '21-30'
when datediff(yy,出生日期,getdate())<41 then '31-40'
when datediff(yy,出生日期,getdate())<51 then '41-50'
else '60岁以上'
end) with rollup
秋水森 2005-11-29
  • 打赏
  • 举报
回复
关注,对于这个虚拟字段,我也在关注!!
cleanclear0614 2005-11-29
  • 打赏
  • 举报
回复
晕,已经搞定得了
谢谢得了
cleanclear0614 2005-11-29
  • 打赏
  • 举报
回复
libin_ftsafe(子陌红尘)
楼上写的。我的另外一个虚拟列名 年龄段 人数
怎么添加呢?
年龄段 人数
20岁以下 。。
20-30 。。。
31-40 。。。
40-51 。。。
51-60 。。。
60岁以上 。。。
duoluohuifeng 2005-11-29
  • 打赏
  • 举报
回复
select case when datediff(yy,生日,getdate())<20 then 20岁以下,
when datediff(yy,生日,getdate())between 20 and 30 then '20-30'
when datediff(yy,生日,getdate())between 31 and 40 then '31-40'
when datediff(yy,生日,getdate())between 41 and 50 then '40-51'
when datediff(yy,生日,getdate())between 51 and 60 then '51-60'
when datediff(yy,生日,getdate())>60 then 60岁以上 end ,cout(1)
from 表
group by case when datediff(yy,生日,getdate())<20 then 20岁以下,
when datediff(yy,生日,getdate())between 20 and 30 then '20-30'
when datediff(yy,生日,getdate())between 31 and 40 then '31-40'
when datediff(yy,生日,getdate())between 41 and 50 then '40-51'
when datediff(yy,生日,getdate())between 51 and 60 then '51-60'
when datediff(yy,生日,getdate())>60 then 60岁以上 end
子陌红尘 2005-11-29
  • 打赏
  • 举报
回复
select
case
when datediff(yy,出生日期,getdate())<20 then '20岁以下'
when datediff(yy,出生日期,getdate())<31 then '21-30'
when datediff(yy,出生日期,getdate())<41 then '31-40'
when datediff(yy,出生日期,getdate())<51 then '41-50'
else '60岁以上'
end,
count(*)
from

group by
case
when datediff(yy,出生日期,getdate())<20 then '20岁以下'
when datediff(yy,出生日期,getdate())<31 then '21-30'
when datediff(yy,出生日期,getdate())<41 then '31-40'
when datediff(yy,出生日期,getdate())<51 then '41-50'
else '60岁以上'
end
na.nashi 2005-11-29
  • 打赏
  • 举报
回复
libin_ftsafe(子陌红尘)
和duoluohuifeng(堕落回风)
都应得分。duoluohuifeng的count(1)就可以添加第二个字段
cleanclear0614 2005-11-29
  • 打赏
  • 举报
回复
谢谢大家。分太少,先结帐得了
jiaojian843 2005-11-29
  • 打赏
  • 举报
回复
直接插入表中就行,请参考。

select
case
when datediff(yy,出生日期,getdate())<20 then '20岁以下'
when datediff(yy,出生日期,getdate())<31 then '21-30'
when datediff(yy,出生日期,getdate())<41 then '31-40'
when datediff(yy,出生日期,getdate())<51 then '41-50'
else '60岁以上'
end 年龄段,
count(*) 人数
into #newtable
from
sourcetable
group by
case
when datediff(yy,出生日期,getdate())<20 then '20岁以下'
when datediff(yy,出生日期,getdate())<31 then '21-30'
when datediff(yy,出生日期,getdate())<41 then '31-40'
when datediff(yy,出生日期,getdate())<51 then '41-50'
else '60岁以上'
end
select *
from #newtable

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧