【DB2】国标行业分类存储,通过SQL查询出层级关系
2018-03-28 11:25
393 查看
新建表
点击下载插入语句
数据截图:
![](https://images2018.cnblogs.com/blog/832918/201803/832918-20180328112606689-1717815668.png)
现在数据是这个样子的,我们需要找出对应的层级关系,例如:
![](https://images2018.cnblogs.com/blog/832918/201803/832918-20180328112446963-1945593456.png)
实现SQL如下:
如果说存在越级维那么上述SQL则会出现问题
【内连接】
![](https://images2018.cnblogs.com/blog/832918/201803/832918-20180328123645682-2142184932.png)
【左连接】
![](https://images2018.cnblogs.com/blog/832918/201803/832918-20180328123646644-4415586.png)
由此可见,最好使用左连接,不然层级出现越级维的时候就会出现数据缺失。
DROP TABLE Industry; CREATE TABLE Industry( IndustryCode VARCHAR(40),IndustryName VARCHAR(100),ParentID VARCHAR(40) )
点击下载插入语句
数据截图:
![](https://images2018.cnblogs.com/blog/832918/201803/832918-20180328112606689-1717815668.png)
现在数据是这个样子的,我们需要找出对应的层级关系,例如:
![](https://images2018.cnblogs.com/blog/832918/201803/832918-20180328112446963-1945593456.png)
实现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'运行结果
![](https://images2018.cnblogs.com/blog/832918/201803/832918-20180328123645682-2142184932.png)
【左连接】
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'
![](https://images2018.cnblogs.com/blog/832918/201803/832918-20180328123646644-4415586.png)
由此可见,最好使用左连接,不然层级出现越级维的时候就会出现数据缺失。
相关文章推荐
- 不支持直接到存储查询(DbSet、DbQuery、DbSqlQuery、DbRawSqlQuery)的数据绑定。应使用数据填充 DbSet (例如通过对 DbSet 调用 Load),然后绑定到本地数据
- 通过存储过程进行分页查询的SQL示例
- DB2性能优化 – 如何通过db2优化工具提升SQL查询效率
- 查询分类并实现分类统计SQL存储过程
- sql查询层级分类
- DB2通过SQL实现递归查询 (根据子机构查询机构所属树)
- DB2存储过程实现查询表数据,生成动态SQL,并执行
- 典型通过日期查询SQL
- Oracle、SQL和DB2分页查询写法介绍
- sql层级数据查询
- 通过SQL语句提取存储过程中的内容
- MySQL入门(1)- SQL语句分类&查询语句
- MySQL存储结构及SQL分类
- MySQL、MS SQL、Oracle三种数据库查询M到N行数据 分类: 数据库 2009-11-10 23:33 688人阅读 评论(0) 收藏
- 通过sql语句查询出来的结果字段没有到对应实体类时的处理方法
- NC通过sql查询VO
- 通过手动创建统计信息优化sql查询性能案例
- SQL 中使用With As处理层级关系小记
- 通过sql语句快速查询数据库共有多少张表
- 行业分类代码 2017 最新版 创建sql语句