当前位置: 代码迷 >> Sql Server >> 来看看这sql语句该如何写
  详细解决方案

来看看这sql语句该如何写

热度:51   发布时间:2016-04-24 09:37:13.0
来看看这sql语句该怎么写


如图是全国各省市的行政编号及名称
我的需求是 多出来2列显示该县市对应的上一级行政编号及名称
例如 330100 杭州市 330000 浙江省
          330185 临安市 330100 杭州市

------解决思路----------------------
应该可以取后三位 然后自己去构造一个ID。

后三位对100求余,取整可以得到层级。
------解决思路----------------------
With table1(CodeId, CodeName) AS (
    SELECT '330000','浙江省' UNION ALL
    SELECT '330100','杭州市' UNION ALL
    SELECT '330101','市辖区' UNION ALL
    SELECT '330185','临安市'
)
,t AS (
    -- 市
    SELECT c.*,
           p.CodeId PCodeId,
           p.CodeName PCodeName
      FROM table1 c
      JOIN table1 p
        ON p.CodeId LIKE '__0000'
       AND LEFT(p.CodeId,2) = LEFT(c.CodeId,2)
     WHERE c.CodeId NOT LIKE '__0000'
       AND c.CodeId LIKE '____00'
    UNION ALL -- 县
    SELECT c.*,
           p.CodeId PCodeId,
           p.CodeName PCodeName
      FROM table1 c
      JOIN table1 p
        ON p.CodeId LIKE '____00'
       AND LEFT(p.CodeId,4) = LEFT(c.CodeId,4)
     WHERE c.CodeId NOT LIKE '____00'
)
SELECT * FROM t ORDER BY CodeID

CodeId CodeName PCodeId PCodeName
------ -------- ------- ---------
330100 杭州市   330000  浙江省
330101 市辖区   330100  杭州市
330185 临安市   330100  杭州市
  相关解决方案