我有一个数据表,其中包含技术上是树结构的数据,但树是由代码和此代码的长度定义的。基于SQL中的代码计算树级别
的商品代码表包括的代码和描述:
例如:
Code Description
------ -------------
0101 Live Animals
01011 Horses
010110 Purebred
010190 Other
项目的级别是由在其下方计数码计算。它下面的代码必须包含在当前代码中。如果那有意义的话。
所以在上面的例子:
0101 is level 0 (nothing is contained in it)
01011 is level 1 (0101 is contained in it)
010110 is level 2 (0101 and 01011 is contained in it)
010190 is level 1 (only 0101 is contained in it)
有没有办法让SQL这些水平?我正在使用DB2。
编辑: 尼古拉和戈登的解决方案都工作得很好,虽然我认为尼古拉的速度稍快!感谢你们!
不得不做出一些修改,以考虑DB2:
select
t1.code, count(t2.code)
from commoditycode t1
left join commoditycode t2
on substr(t1.code, 1, length(t1.code) - 1) like concat(t2.code, '%')
group by t1.code
哪个DBMS? PostgreSQL的?甲骨文? DB2? –
你可以调整数据的存储方式么?这不是一个选项吗? – Purplegoldfish
不幸的是我无法重组数据。我目前正在通过计算Java中的级别来解决这个问题。这是相当快速和高效的,但想知道是否有可能在纯SQL中执行此操作。 – Neil