新建表

DROP TABLE Industry;
CREATE TABLE Industry(
IndustryCode VARCHAR(40),IndustryName VARCHAR(100),ParentID VARCHAR(40)
)

点击下载插入语句

数据截图:

现在数据是这个样子的,我们需要找出对应的层级关系,例如:

实现SQL如下:

SELECT
A.IndustryCode AS CLASS01,A.INDUSTRYNAME CLASS_01NM,
B.IndustryCode AS CLASS02,B.INDUSTRYNAME CLASS_02NM,
C.IndustryCode AS CLASS03,C.INDUSTRYNAME CLASS_03NM,
C.IndustryCode AS CLASS04,C.INDUSTRYNAME CLASS_04NM,
DENSE_RANK() over(ORDER BY A.INDUSTRYCODE) SEQ
FROM Industry A,Industry B,Industry C,Industry D
WHERE A.INDUSTRYCODE=B.PARENTID AND B.INDUSTRYCODE=C.PARENTID AND C.INDUSTRYCODE=D.PARENTID and length(A.IndustryCode)=1

特别说明:

如果说存在越级维那么上述SQL则会出现问题

【内连接】

WITH DT(VALUE,NAME,PARENT)
AS
(
SELECT 'A','中国',NULL FROM SYSIBM.DUAL UNION ALL
SELECT 'A01','北京','A' FROM SYSIBM.DUAL UNION ALL
SELECT 'A02','云南','A' FROM SYSIBM.DUAL UNION ALL
SELECT 'A011','昆明','A02' FROM SYSIBM.DUAL UNION ALL
SELECT 'AA12','曲靖','A02' FROM SYSIBM.DUAL
) SELECT A.VALUE AVALUE,A.NAME ANAME,B.VALUE BVALUE,B.NAME BNAME FROM DT A,DT B WHERE A.VALUE=B.PARENT
AND LENGTH(A.VALUE)='3'

运行结果

【左连接】

WITH DT(VALUE,NAME,PARENT)
AS
(
SELECT 'A','中国',NULL FROM SYSIBM.DUAL UNION ALL
SELECT 'A01','北京','A' FROM SYSIBM.DUAL UNION ALL
SELECT 'A02','云南','A' FROM SYSIBM.DUAL UNION ALL
SELECT 'A011','昆明','A02' FROM SYSIBM.DUAL UNION ALL
SELECT 'AA12','曲靖','A02' FROM SYSIBM.DUAL
) SELECT A.VALUE AVALUE,A.NAME ANAME,B.VALUE BVALUE,B.NAME BNAME
FROM DT A LEFT JOIN DT B ON A.VALUE=B.PARENT
WHERE LENGTH(A.VALUE)='3'

由此可见,最好使用左连接,不然层级出现越级维的时候就会出现数据缺失。

【DB2】国标行业分类存储,通过SQL查询出层级关系的更多相关文章

  1. MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?

    如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...

  2. 如何将sql查询出的列名用注释代替?

    如何将sql查询出的列名用注释代替? 大家正常的工作的时候,会有这样的要求,客户想要看下原始数据,但是呢.前台导出又麻烦,这时候只能从数据库拷贝出来一份.但是呢,数据库里面的字段客户又看不明白,只能用 ...

  3. mybatis查询无结果, 数据库运行相同sql查询出结果

    一.问题描述 mybatis查询无结果, 数据库运行相同sql查询出结果, 如下 这是数据库记录 这是mybatis查询出的结果, 记录条数0 这是直接将控制台一模一样的sql查询语句放到Navica ...

  4. SQL查询出某字段不等于某值的行(其中有为NULL的字段)

    表1如下:TBD1100   TBD1101   TBD1102------------------------------------------  1001            水果       ...

  5. SQL查询出每门课都大于80 分的学生姓名

    Course表如下: 查询出每门课都大于80 分的学生姓名有两种方法. 1.select  distinct name from Course where name not in (select di ...

  6. SQL查询出一个表数据插入到另一个表里

    下面两中方式都是将 srcTbl 的数据插入到 destTbl,但两句又有区别的: 方式一 (select into from)要求目标表(destTbl)不存在,因为在插入时会自动创建. selec ...

  7. sql——查询出表中不为空或为空字段的总值数

    查询所给的表中值为空的总数 判断字段是否为空的sql语句 SELECT sex FROM id where sex is not NULL SELECT COUNT(*) t FROM id wher ...

  8. 一个SQL查询出每门课程的成绩都大于80的学生姓名

    name   kecheng    fenshu 张三     语文     81 张三     数学     75 李四     语文     76 李四     数学     90 王五     ...

  9. SQL查询无限层级结构的所有下级,所有上级

    无限层级结构的table1表,Id(主键),ParentId(父级id)查询某个Id的所有下级或所有上级,使用WITH AS,UNION ALL 查询 1.查询Id为1所有的下级 WITH T AS( ...

随机推荐

  1. Laravel5.5 生成测试数据

    1.在database/factories/UserFactory.php 中添加 2.在tinker中生成数据 3.数据生成成功

  2. cobbler的web界面

    添加用户名和密码 useradd test echo "123456" | passwd --stdin test 修改认证方式为pam #vim /etc/cobbler/mod ...

  3. 洛谷 P3383 【模板】线性筛素数-线性筛素数(欧拉筛素数)O(n)基础题贴个板子备忘

    P3383 [模板]线性筛素数 题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示查询的范 ...

  4. java 时间格式化中的模式字母

    java日期格式化中的模式字母有特定的意义,由于没有注意,今天在做工程的时候导致出现了奇怪的日期: 错误写法如下: 然而得到了错误的结果: 正确写法如下: 这样就得到了正确的结果 mm指的是分钟,MM ...

  5. UVALive 5097 Cross the Wall

    贪心思想,$dp$,斜率优化. 首先将人按照$w$从大到小排序,如果$w$一样,按$h$从大到小排.这样一来,某位置之后,比该位置$h$小的都是不需要考虑的. 因此,形成了如下图所示的结果: 即第一个 ...

  6. POJ 1741 Tree (点分治)

                                                                        Tree Time Limit: 1000MS   Memory ...

  7. ( 转 ) 数据库BTree索引、Hash索引、Bitmap位图索引的优缺点

    测试于:MySQL 5.5.25 当前测试的版本是Mysql 5.5.25只有BTree和Hash两种索引类型,默认为BTree.Oracle或其他类型数据库中会有Bitmap索引(位图索引),这里作 ...

  8. ASP.net 资源请求漏洞利用工具PadBuster

    ASP.net 资源请求漏洞利用工具PadBuster 在ASP.net 网站中,为了便于部署网站项目,开发者往往会将资源(图片.Javascript文件)嵌入到dll文件中.而网页中,会使用WebR ...

  9. python3中zipfile模块的常用方法

    一.zipfile模块的简述 zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的, 在这里对zipfile的使用方法做一些记 ...

  10. 输入输出流和String的混合使用-替换信息

    ---恢复内容开始--- package demo; import java.io.BufferedReader; import java.io.BufferedWriter; import java ...