day 21 求贫困户

create table sdata.dbo. t_access_times(username varchar(255),month varchar(255),salary int)
insert into sdata.dbo.t_access_times values ('A','2016-01',5)
insert into sdata.dbo.t_access_times values ('A','2016-01',15)
insert into sdata.dbo.t_access_times values ('B','2016-01',5)
insert into sdata.dbo.t_access_times values ('A','2016-01',8)
insert into sdata.dbo.t_access_times values ('B','2016-01',25)
insert into sdata.dbo.t_access_times values ('A','2016-01',5)
insert into sdata.dbo.t_access_times values ('A','2016-02',4)
insert into sdata.dbo.t_access_times values ('A','2016-02',6)
insert into sdata.dbo.t_access_times values ('B','2016-02',10)
insert into sdata.dbo.t_access_times values ('B','2016-02',5)
insert into sdata.dbo.t_access_times values ('A','2018-01',5)
insert into sdata.dbo.t_access_times values ('A','2018-01',15)
insert into sdata.dbo.t_access_times values ('B','2018-01',5)
insert into sdata.dbo.t_access_times values ('A','2018-01',8)
insert into sdata.dbo.t_access_times values ('B','2018-01',25)
insert into sdata.dbo.t_access_times values ('A','2018-01',5)
insert into sdata.dbo.t_access_times values ('A','2018-02',4)
insert into sdata.dbo.t_access_times values ('A','2018-02',6)
insert into sdata.dbo.t_access_times values ('B','2018-02',10)
insert into sdata.dbo.t_access_times values ('B','2018-02',5)
insert into sdata.dbo.t_access_times values ('A','2017-01',10)
insert into sdata.dbo.t_access_times values ('A','2017-01',18)
insert into sdata.dbo.t_access_times values ('B','2017-01',5)
insert into sdata.dbo.t_access_times values ('A','2017-01',18)
insert into sdata.dbo.t_access_times values ('B','2017-01',15)
insert into sdata.dbo.t_access_times values ('A','2017-01',35)
insert into sdata.dbo.t_access_times values ('A','2017-02',44)
insert into sdata.dbo.t_access_times values ('A','2017-02',65)
insert into sdata.dbo.t_access_times values ('B','2017-02',18)
insert into sdata.dbo.t_access_times values ('B','2017-02',5)

select * from sdata.dbo. t_access_times
--1、第一步,先求个用户的月总金额
select
username
,month
,sum (salary) salary_sum
into sdata.dbo. t_access_timestest
from sdata.dbo. t_access_times
group by username
,month
order by username asc,month asc

--2.将月总金额表 自己连接 自己连接
drop table sdata.dbo.t_access_T
select * into sdata.dbo.t_access_T from sdata.dbo. t_access_timestest

select
a.username
,a.month
,a.salary_sum -- 当月累计的钱
,SUM(b.salary_sum) until_money --截止到当月的报销的钱数
from sdata.dbo. t_access_timestest a
left join sdata.dbo.t_access_T b
on a.username =b.username
and a.month >=b.month
group by a.username
,a.month
,a.salary_sum

--3、第三步,从上一步的结果中
--进行分组查询,分组的字段是a.username a.month
--求月累计值: 将b.month <= a.month的所有b.salary求和即可


create table sdata.dbo.requst
(
xh nvarchar(255) --序号
,xian nvarchar(255) --县(市、区、旗)
,xiang nvarchar(255) --乡(镇)
,xzc nvarchar(255) --行政村
,zrc nvarchar(255) --自然村
,hbh nvarchar(255) --户编号
,rbh nvarchar(255) --人编号
,xm nvarchar(255)--姓名
,zjh nvarchar(255) --证件号码
,zjh2 nvarchar(255) --证件号码
,rs nvarchar(255) --人数
,yhzgx nvarchar(255) --与户主关系
,mz nvarchar(255)--民族
,whcd nvarchar(255) --文化程度
,zxszk nvarchar(255) --在校生状况
,jkzk nvarchar(255) --健康状况
,ldjn nvarchar(255) --劳动技能
,wgzk nvarchar(255) --务工状况
,wgsj nvarchar(255) --务工时间(月)
,cjdbyl nvarchar(255) --参加大病医疗
,tpsx nvarchar(255) --脱贫属性
,pkhsx nvarchar(255) --贫困户属性
,zyzpyy nvarchar(255) --主要致贫原因
,wyh nvarchar(255) --危房户
,ysaq nvarchar(255) --饮水安全
,qskn nvarchar(255) --饮水困难
,rjcsr nvarchar(255) --人均纯收入
,tel nvarchar(255) --联系电话
)

select * from sdata.dbo.requst

--将前100行的数据的这些字段插入到sdata.dbo.jiaotong ,将这些人定为买车的人
select top 100
XM
,zjh
,'身份证' zhjlx
into sdata.dbo.jiaotong from sdata.dbo.requst
select * from sdata.dbo.requst

--已经有车还来申报的
select a.*
--into sdata.dbo.havecar
from sdata.dbo.requst a
left join sdata.dbo.jiaotong b
on a.xm =b.xm
and a.zjh = b.zjh
where b.xm is not null


--真正的贫困户,没有车的 两种写法
--第一种:except
select * from sdata.dbo.requst
except
select * from sdata.dbo.havecar

--第二种
select a.*
,substring(a.zjh,7,4) born_year
,DateName(year,GetDate()) - cast (substring(a.zjh,7,4) as int) year_age --今年多大
into sdata.dbo.pingkun_test
from sdata.dbo.requst a
left join sdata.dbo.jiaotong b
on a.xm =b.xm
and a.zjh =b.zjh
where b.xm is null

--根据三个维度统计人数总和
select
CONVERT(varchar(7),GETDATE(),120) date
,xian
,xiang
,xzc
,SUM(cast (rs as int )) sum_ppeople
into pdata.dbo.per_people
from sdata.dbo.pingkun_test
group by xian
,xiang
,xzc


insert into pdata.dbo.per_people
select
'2016-08' date
,xian
,xiang
,xzc
,SUM(cast (rs as int )) sum_ppeople
--into pdata.dbo.per_people
from sdata.dbo.pingkun_test
group by xian
,xiang
,xzc

--同比率
select
b.date dat_now
,b.sum_per_people now_sum_per_people
,a.date dat_last
,a.sum_per_people last_sum_per_people
,CONVERT(varchar(7),GETDATE(),120) date
,(b.sum_per_people-a.sum_per_people*1.0)/a.sum_per_people *100.0 rate
from (select
date
,sum(sum_ppeople) sum_per_people
from pdata.dbo.per_people
where date='2016-08'
group by date) a
left join (
select
date
,sum(sum_ppeople) sum_per_people
from pdata.dbo.per_people
where date='2017-08'
group by date) b
on a.date <> b.date




--截取几位的字符
select substring('anowenciwnc',2,3)
--获取当前年
select DateName(year,GetDate()) as '年'


--取大于3的
select
username
,month
,COUNT(1) dtale_sum
from sdata.dbo. t_access_times
group by username
,month
having COUNT(1)>=3

猜你喜欢

转载自www.cnblogs.com/simly/p/9568724.html