高手帮帮忙

[复制链接]
查看11 | 回复9 | 2010-3-1 11:19:49 | 显示全部楼层 |阅读模式
有一个表两列
xzjgdm行政机构代码
sjxzjgdm 上级行政机构代码
里面数据一共分了4个级别县-乡镇-村-组
需求是对 一个县的数据进行统计
要求如下
乡镇1 该乡镇村数 该乡镇组数
乡镇2 该乡镇村数 该乡镇组数
乡镇3 该乡镇村数 该乡镇组数
乡镇4 该乡镇村数 该乡镇组数


乡镇n 该乡镇村数 该乡镇组数
请别用多个自连接那样可以实现但效率低
谢谢各位大大啦
表格和数据在附件里
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
with s as
(select XZJGDM,SJXZJGDM,level lel
from t
connect by prior XZJGDM = SJXZJGDM
start with XZJGDM = '433127')
select a.SJXZJGDM,a.num_ctr "该乡镇村数",b.num_grp "该乡镇组数"
from
(select SJXZJGDM,count(*) num_ctr
from s
where lel = 3
group by SJXZJGDM
) a,
(select substr(SJXZJGDM,1,8) dwdm,count(*) num_grp
from s
where lel = 4
group by substr(SJXZJGDM,1,8)
) b
where a.SJXZJGDM = b.dwdm;
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
想到个更简单的
select tow_cd "乡镇",num_ctr "该乡镇村数",num_grp-num_ctr "该乡镇组数"
from

(select substr(XZJGDM,1,8) tow_cd

,count(distinct substr(XZJGDM,1,10)) num_ctr

,count(XZJGDM) num_grp

from t

where length(XZJGDM) > 8

group by substr(XZJGDM,1,8)
);
[ 本帖最后由 CaptainKobe 于 2010-2-5 20:27 编辑 ]
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
原帖由 CaptainKobe 于 2010-2-5 20:20 发表
想到个更简单的
select tow_cd "乡镇",num_ctr "该乡镇村数",num_grp-num_ctr "该乡镇组数"
from

(select substr(XZJGDM,1,8) tow_cd

,count(distinct substr(XZJGDM,1,10)) num_ctr

,count(XZJGDM) num_grp

from t

where length(XZJGDM) > 8

group by substr(XZJGDM,1,8)
);

你真牛,附件里就一堆数字,连各级别的定义都没有。你怎么看出前8位是乡镇,10位是村?num_grp-num_ctr又是怎么来的?
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
肉眼虽然看不出来,group by length(xzjgdm),count(*)就发现了
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
select tow_cd "乡镇",num_ctr "该乡镇村数",num_grp-num_ctr "该乡镇组数"
from
(select substr(XZJGDM,1,8) tow_cd --乡代码

,count(distinct substr(XZJGDM,1,10)) num_ctr --村个数

,count(XZJGDM) num_grp --组个数
from t
where length(XZJGDM) > 8 --只取村、组2级
group by substr(XZJGDM,1,8)
);
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
你真牛,附件里就一堆数字,连各级别的定义都没有。你怎么看出前8位是乡镇,10位是村?num_grp-num_ctr又是怎么来的?
呵呵

一看就知道
整天看那些代码 我都快背过了
呵呵
[ 本帖最后由 wfjt 于 2010-2-7 08:33 编辑 ]
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
楼主的这个要求
在平时工作时候
excel就可以实现的
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
如果每个村都有组
只要对 length(XZJGDM)=12的行计数
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
原帖由 newkid 于 2010-2-5 22:50 发表

你真牛,附件里就一堆数字,连各级别的定义都没有。你怎么看出前8位是乡镇,10位是村?num_grp-num_ctr又是怎么来的?

这个。。。感觉楼主这个单位代码表跟我们公司设计得有点类似。。所以。。
,count(distinct substr(XZJGDM,1,10)) num_ctr --每个镇村个数
,count(XZJGDM) num_grp --每个镇村+组个数
所以 num_grp-num_ctr
[ 本帖最后由 CaptainKobe 于 2010-2-7 11:59 编辑 ]
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行