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来表示,如下图:

SQL如何制作一份省市区行政表?

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

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如何制作一份省市区行政表?

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

猜你喜欢

转载自blog.51cto.com/15057820/2653268
今日推荐