新建表

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. poj 1066(枚举+线段相交)

    Treasure Hunt Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6328   Accepted: 2627 Des ...

  2. HDU 2164(模拟)

    Rock, Paper, or Scissors? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  3. MySQL 8.0.13安装教程(windows 64位) (转)

    官先去网下载点击MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini的文件解压后的目录并没有my.ini文件,没关系可以自行创建.在安装根目录下添加my.ini(新建文本文件, ...

  4. 洛谷——P1024 一元三次方程求解

    P1024 一元三次方程求解 题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-10 ...

  5. ret2dir:Rethinking Kernel Isolation(翻译)

    前一段时间在网上找ret2dir的资料,一直没找到比较系统的介绍,于是干脆把这篇经典的论文翻译了,当然,第一次翻译(而且还这么长),很多词汇不知道到底该怎么翻译,而且最近事情也比较多, 翻译得挺烂的, ...

  6. python3 开发面试题(生成列表)6.1

    话不多说直接上题: 生成如下列表: [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12]] # 方式一 list1 ...

  7. Asp.Net MVC part4 异步、校验、区域Area

    异步方式1:使用jquery的异步函数方式2:使用MVC的AjaxHelper行为的返回值设置:JsonResult对象,使用Json方法接收一个对象,在内部会完成对象的js序列化,向输出流中输出js ...

  8. 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章

    第4章 子查询 4.2.1 Exist 谓语: use TSQLFundamentals2008 select * from Sales.Customers as C where c.country= ...

  9. GetAdaptersInfo & GetAdaptersAddresses

    I use GetAdaptersInfo to get MAC addresses of interfaces.   GetAdaptersInfo exist on old and new ver ...

  10. 关于JS中原型链中的prototype与_proto_的个人理解与详细总结

    一直认为原型链太过复杂,尤其看过某图后被绕晕了一整子,今天清理硬盘空间(渣电脑),偶然又看到这图,勾起了点回忆,于是索性复习一下原型链相关的内容,表达能力欠缺逻辑混乱别见怪(为了防止新人__(此处指我 ...