weichao9999分快完了,帮解决SQL语句为谢 ( 积分: 0 )

  • 主题发起人 主题发起人 xx6620063
  • 开始时间 开始时间
X

xx6620063

Unregistered / Unconfirmed
GUEST, unregistred user!
地址表
编码 父编码 地址 地址级别
02 0 长顺县 县市
03 02 摆所镇 乡镇
04 02 营盘乡 乡镇
05 03 摆所村 村组
06 03 城伍村 村组
... ...
基本表
G_id 地址编码 录入人员 录入时间
0205025 05 XXXX
0205026 05
0205027 06
详细表
Gr_id 与户主关系 姓名 性别 出生年月 页码
0205025 户主 杨二 男 1985-08-01 25
0205026 长女 小三 男 1988-08-01 25
0205027 长子 小华 男 1987-08-04 25
如何查询得到如下结果://如何获得地址和户主姓名
地址 姓名 性别 出生年月 户主姓名 页码
摆所村 小三 男 1988-08-01 杨二 25
摆所村 小华 男 1987-08-04 杨二 25
城伍村
....
....

如以县市级别来统计,所有属县的乡镇的数据统计出来,如以乡镇级别统计,所属乡镇的村组统计出来见上表结果.
 
这个结果要写一个存储过程或者函数来完成
 
帮帮忙,看能不能帮我个函数,先谢过了
 
你是在access中么?
 
是的,帮忙写个函数 地址表用树显示
 
那不能用函数或者存储过程,
只能用access的查询了,你可以先定义两个查询,就是access的视图,然后再从这两个视图里统计数据
 
如果在SQL中可用存储过程來實現!!!
 
根据你的3个表是得不到你要得查询结果得,
详细表中缺少字段表明户主与子女得关系?
难道是用页码,表示他们是一家?
 
是的,用页码表示他们是一家人.
 
select 姓名,性别,出生年月,户主姓名,页码
from 详细表 a,详细表 b
where a.与户主关系<>'户主'
and b.与户主关系='户主'
and a.页码=b.页码
你试一下,这句话是否可以得到这样得结果:
姓名 性别 出生年月 户主姓名 页码
小三 男 1988-08-01 杨二 25
小华 男 1987-08-04 杨二 25
 
同一家庭是否是页码来决定的,如果是的话可用页码作为关联的条件。
再不行的话,先形成1~2个视图,在将视图于表关联即可实现你的关联。
select c.Gr_id,
(select b.地址 from 基本表 a,地址表 b where a.地址编码=b.编码 and c.Gr_id=a.Gr_id) as 地址,
c.姓名,
c.性别,
c.出生年月,
(select 姓名 from 详细表 d where c.页码=d.页码 and d.与户主关系='户 主'.) as 户主姓名
c.页码
from 详细表 c
where c.与户主关系<>'户主'
 
先组合成如下数据结果
村组编码,乡镇编码,县市编码
05, 03, 02
06, 03, 02

查询1:
select a.编码 as 村组编码,a.父编码 as 乡镇编码,b.编码 as 县市编码 from
(select * from 地址表 where 地址级别='村组') a
left join (select * from 地址表 where 地址级别='县市') b on a.父编码 = b.编码

基本表、详细表联合
查询2
select bb.地址 as 村组编码,aa.* from 详细表 aa
left join 基本表 bb on aa.Gr_id = bb.Gr_id

详细表处理
查询3
select b.地址,a.*,c.姓名 as 户主姓名,a.页码 from
详细表 a
left join 地址表 b on a.地址编码= b.编码
left join (select 地址编码,姓名 from TAB2 where 与户主关系='户主' ) c
on a.地址编码= c.地址编码


总联合
select c.村组编码,c.乡镇编码,c.县市编码,a.* from 查询3 a
left join 查询2 b on a.Gr_id = b.Gr_id
left join 查询1 c on b.村组编码 = c.村组编码

得到如下结果

村组编码,乡镇编码,县市编码,Gr_id,与户主关系, 姓名,性别,出生年月,页码,户主姓名

得到这个结果后你就可以随意统计了,在access中好像不支持多层的派生表,所以我用access的查询来实现
没有调试,语法如有问题自己修改
 
后退
顶部