VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 593|回复: 2

如何计算满足条件的字段数目?

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-9 19:40:01 | 显示全部楼层 |阅读模式
我现在想求这样的一个问题:
我有这样的一张表:户主姓名,年龄1,年龄2,年龄3,年龄4,年龄5,年龄6
我现在想计算年龄1,年龄2,....中>80的数目,即年龄1,年龄2中如果大于90的话就算是一个,将这6个年龄中满足条件的数目统计出来,再加上户主姓名输出到另外一张表中,该如何实现?
用图表示如下:
户主姓名|年龄1|年龄2|年龄3|年龄4|年龄5|年龄6
张三    |80   |50   | 52  | 92  | 20  | 10

李四    |75   |81   | 63  | 40  | 23  | 85

小五    |93   |78   | 77  | 50  | 26  | 33

我现在想得到这样的结果:
户主姓名|60<年龄<75|75<年龄<90|年龄>90

该如何实现,先谢谢了!!
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-16 11:00:01 | 显示全部楼层
create table #temp
(
name varchar(10),
age1 int,
age2 int,
age3 int,
age4 int,
age5 int,
age6 int
)

select * from #temp

insert into #temp values('张三',80,50,52,92,20,10)
insert into #temp values('李四',75,81,63,40,23,85)
insert into #temp values('小五',93,78,77,50,26,33)


select aaa.name 户主姓名,aaa.age6075 [60<年龄<75],bbb.age7590 [75<年龄<90],ccc.age90 [年龄>90]
from
(
select a.name,isnull(b.age6075,0) age6075
from #temp a,
(
select aa.name,isnull(count(*),0) as age6075 from
(
  select name,age1 as age6075
  from #temp
  where age1>=60 and age1<75
  union all
  select name,age2
  from #temp
  where age2>=60 and age2<75
  union all
  select name,age3
  from #temp
  where age3>=60 and age3<75
  union all
  select name,age4
  from #temp
  where age4>=60 and age4<75
  union all
  select name,age5
  from #temp
  where age5>=60 and age5<75
  union all
  select name,age6
  from #temp
  where age6>=60 and age6<75
) aa
group by aa.name
) b
where a.name*=b.name
) aaa,
-----
(
select a.name,isnull(b.age7590,0) age7590
from #temp a,
(
select aa.name,isnull(count(*),0) as age7590 from
(
  select name,age1 as age7590
  from #temp
  where age1>=75 and age1<90
  union all
  select name,age2
  from #temp
  where age2>=75 and age2<90
  union all
  select name,age3
  from #temp
  where age3>=75 and age3<90
  union all
  select name,age4
  from #temp
  where age4>=75 and age4<90
  union all
  select name,age5
  from #temp
  where age5>=75 and age5<90
  union all
  select name,age6
  from #temp
  where age6>=75 and age6<90
) aa
group by aa.name
) b
where a.name*=b.name
) bbb,
----
(
select a.name,isnull(b.age90,0) age90
from #temp a,
(
select aa.name,isnull(count(*),0) as age90 from
(
  select name,age1 as age90
  from #temp
  where age1>=90
  union all
  select name,age2
  from #temp
  where age2>=90
  union all
  select name,age3
  from #temp
  where age3>=90
  union all
  select name,age4
  from #temp
  where age4>=90
  union all
  select name,age5
  from #temp
  where age5>=90
  union all
  select name,age6
  from #temp
  where age6>=90
) aa
group by aa.name
) b
where a.name*=b.name
) ccc
where aaa.name=bbb.name
and bbb.name=ccc.name
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-24 16:00:01 | 显示全部楼层
非常谢谢啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表