点击关注上方“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 表数据,磁盘空间还是被占用?
社会内卷的真正原因:华为内部论坛的这篇雄文火了