用SQL生成一份中国行政表

点击关注上方“SQL数据库开发”,

设为“置顶或星标”,第一时间送达干货SQL专栏SQL基础知识第二版
SQL高级知识第二版

问题描述

在我们日常统计中,经常需要统计到全国各地区的一些销售情况,而全国各地区的行政区划是怎么样的,我们需要做一张省市区的基础表来一一对应。

问题分析

我们在网上通过查找每个省市区的地区编码,可以获取一份完整的省市区SQL脚本。如下图:

(具体的SQL脚本可以在“阅读原文”中获取,提取码:emwf )

我们通过分析可以得出省市区的层级关系,这样我们就可以根据这个层级关系来制作一份完整的行政区划表了。

解决办法

我们获取的原始表的表名叫China,下面我们来制作这个行政区划表

WITH CTE AS (
  SELECT  ID,NAME,PId,1 AS LEVEL
  FROM  China
  WHERE  pId = 0
  UNION ALL
  SELECT  t.id,t.NAME,t.pId,cte. LEVEL + 1 AS LEVEL
  FROM China t  
  JOIN CTE ON t.pId = CTE.id
)

使用我们之前介绍的递归查询,将PID和ID进行关联,找出每条记录的层级,用1,2,3,4来表示,如下图:

有了每个城市的层级标记,我们就可以根据层级标记来指定它们具体的城市等级。

SELECT     
t1.name AS [省]    
,t2.name AS [市]  
,t3.name AS [县]  
,t4.name AS [区]
FROM (SELECT * FROM CTE WHERE LEVEL=1) AS t1 
LEFT JOIN 
(SELECT * FROM CTE WHERE LEVEL=2) AS t2 ON t1.id=t2.pId
LEFT JOIN
(SELECT * FROM CTE WHERE LEVEL=3) AS t3 ON t2.id=t3.pId
LEFT JOIN
(SELECT * FROM CTE WHERE LEVEL=4) AS t4 ON t3.id=t4.pId

如下图:

这样一份完整的城市区划表就建好了。




最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行
——End——

后台回复关键字:1024,获取一份精心整理的技术干货
后台回复关键字:进群,带你进入高手如云的交流群。
推荐阅读
Linux之父:财务自由以后,我失眠了!
潘叔卖酒一个月能挣几个W?
如何写出高质量的 SQL 代码?
不懂就问:为什么 delete 表数据,磁盘空间还是被占用?
社会内卷的真正原因:华为内部论坛的这篇雄文火了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SQL数据库开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值