Chinaunix

标题: 求助个存储过程,该怎么写.多谢! [打印本页]

作者: highphone    时间: 2008-12-08 20:48
标题: 求助个存储过程,该怎么写.多谢!
有一个表,共两个字段,一个省份,一个手机号段,要根据省份对手机号段进行简化,就是按省份最大限度的合并号段,如以下数据:
北京        "        1343630"
北京        "        1343631"
北京        "        1343632"
北京        "        1343633"
北京        "        1343634"
北京        "        1343635"
北京        "        1343636"
北京        "        1343637"
北京        "        1343638"
北京        "        1343639"
北京        "        1343640"
北京        "        1343641"
广东        "        1371100"
广东        "        1371101"
合并后的样例应该是:
北京        "        134363"
北京        "        1343640"
北京        "        1343641"
广东        "        1371100"
广东        "        1371101"
数据大概有10万行吧,想写过存储过程,将合并后的号段转存到另一个表中,数据样例具体请见附件
请教一下该存储过程怎么写最合适?多谢各位大侠! 4.rar (15.01 KB)
下载次数: 0
2008-12-8 19:57
作者: anton    时间: 2008-12-09 10:31
”按省份最大限度的合并号段“这句话和你预想得到的结果不是很明白!是不是可以理解成每个省份号段最小值和最大值的区间?就是合并结果
的样例应该是:
北京        "        1343630"
北京        "        1343641"
广东        "        1371100"
广东        "        1371101"
---如果是只有两个字段用一条sql就可以完成,
select  省份,min(号段) from table1 group by 省份 union all
select 省份,max(号段) from table1 group by 省份 order by  省份

[ 本帖最后由 anton 于 2008-12-9 10:32 编辑 ]
作者: dingning239    时间: 2008-12-09 15:06
看看这个帖子,可能对你有帮助:
http://bbs.chinaunix.net/thread-1326639-1-1.html
作者: highphone    时间: 2008-12-14 21:28
核心sql语句:
SELECT DISTINCT province,CASE WHEN p=10 THEN SUBSTR(codenum,1,LENGTH(codenum)-1) ELSE codenum END codenum
FROM
(
  SELECT province,codenum,COUNT(*) over (PARTITION BY province,SUBSTR(codenum,1,LENGTH(codenum)-1)) p
    FROM xuhf_nums
)
order by province;

多执行几次,直到数据量不再变化为止




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2