表T_PUB_UNIT_TYPE结构及部分数据
UNIT_TYPE_ID | UNIT_TYPE_NAME | UNIT_TYPE_CODE
------------------------- --------------------------- ------------------------
1 1000 成品单位
2 1001 重量单位
43 JBNL 设备能力单位表T_PUB_UNIT结构及部分数据
UNIT_ID | PARENT_ID | UNIT_TYPE_ID | UNIT_NAME | UNIT_CODE
------------------ ----------------- ------------------ -------------- -------------
2 0 1 箱
4 2 1 万支
6 4 1 条
21 6 1 盒
现通过两表中的UNIT_TYPE_ID字段将两表联系起来,生成一颗树的结构
成品单位
箱
万只
条
盒
重量单位
吨
公斤
UNIT_TYPE_ID | UNIT_TYPE_NAME | UNIT_TYPE_CODE
------------------------- --------------------------- ------------------------
1 1000 成品单位
2 1001 重量单位
43 JBNL 设备能力单位表T_PUB_UNIT结构及部分数据
UNIT_ID | PARENT_ID | UNIT_TYPE_ID | UNIT_NAME | UNIT_CODE
------------------ ----------------- ------------------ -------------- -------------
2 0 1 箱
4 2 1 万支
6 4 1 条
21 6 1 盒
现通过两表中的UNIT_TYPE_ID字段将两表联系起来,生成一颗树的结构
成品单位
箱
万只
条
盒
重量单位
吨
公斤
其中成品单位,频率,速度外面这层数据取自T_PUB_UNIT_TYPE表,;;里面的一层箱,万只,瓦,伏特取自T_PUB_UNIT各位大侠帮帮忙哈,SQL语句不行,搞了好久都没有搞出来啊。
表T_PUB_UNIT_TYPE结构图
表T_PUB_UNIT结构图
select a.UNIT_TYPE_ID,a.UNIT_TYPE_CODE, b.UNIT_NAME
from T_PUB_UNIT_TYPE a
left join T_PUB_UNIT b on a.UNIT_TYPE_ID = b.UNIT_TYPE_ID
order by a.UNIT_TYPE_ID, b.UNIT_NAME
老兄。你这实现的只是单表T_PUB_UNIT 的显示结果,外面那层表T_PUB_UNIT_TYPE的成品单位,重量单位等字段并没有添加进去。
我觉得实现他要使用connect by ....start with...和union all...语句相结合使用吧,但还是没有写出来。
select a.unit_type_name,b.unit_name from T_PUB_UNIT_TYPE a
left join T_PUB_UNIT b on b.UNIT_TYPE_ID=a.UNIT_TYPE_ID
start with b.PARENT_ID=0
connect by b.PARENT_ID = prior b.UNIT_ID
order by b.parent_id;
select * from
(
select '计量单位管理' name,'0' id,'-1' parentid from dual
union all select UNIT_TYPE_CODE,UNIT_TYPE_ID,'0' from T_PUB_UNIT_TYPE
union all select UNIT_NAME ,UNIT_ID,UNIT_TYPE_ID from T_PUB_UNIT
)
start with parentid ='-1' connect by prior id=parentid
这个可以达到你要求
select * from
(
select '计量单位管理' name,'0' id,'-1' parentid from dual
union all select UNIT_TYPE_NAME,UNIT_TYPE_ID,'0' from T_PUB_UNIT_TYPE
union all select UNIT_NAME ,UNIT_ID,UNIT_TYPE_ID from T_PUB_UNIT
)
start with parentid ='-1' connect by prior id=parentid我刚刚看了原贴的字段名跟后来发的截图表的字段名调转了,把UNIT_TYPE_CODE,改为UNIT_TYPE_NAME就行啦
T2.F_UNIT_ID, T2.F_UNIT_CODE, T2.F_UNIT_NAME
FROM T_PUB_UNIT_TYPE T1
JOIN
(
SELECT F_UNIT_ID, F_PARENT_ID, F_UNIT_TYPE_ID, F_UNIT_CODE, F_UNIT_NAME FROM T_PUB_UNIT
CONNECT BY PRIOR F_UNIT_ID = F_PARENT_ID
START WITH F_UNIT_TYPE_ID IN (SELECT F_UNIT_TYPE_ID FROM T_PUB_UNIT_TYPE)
)T2
ON T1.UNIT_TYPE_ID = T2.F_UNIT_TYPE_ID
大体的思路应该是这样吧。。
T2.F_UNIT_ID, T2.F_PARENT_ID, T2.F_UNIT_CODE, T2.F_UNIT_NAME, T2.LV
FROM T_PUB_UNIT_TYPE T1
JOIN
(
SELECT F_UNIT_ID, F_PARENT_ID, F_UNIT_TYPE_ID, F_UNIT_CODE, F_UNIT_NAME, LEVEL AS LV
FROM T_PUB_UNIT
CONNECT BY PRIOR F_UNIT_ID = F_PARENT_ID
START WITH F_PARENT_ID = '0'
)T2
ON T1.F_UNIT_TYPE_ID = T2.F_UNIT_TYPE_ID
with t_pub_unit_type as
(select '1' unit_type_id, '成品单位' unit_type_name
from dual
union all
select '2' unit_type_id, '重量单位' unit_type_name from dual),
t_pub_unit as
(select '2' unit_id, '0' parent_id, '1' unit_type_id, '箱' unit_name
from dual
union all
select '4' unit_id, '2' parent_id, '1' unit_type_id, '万支' unit_name
from dual
union all
select '6' unit_id, '4' parent_id, '1' unit_type_id, '条' unit_name
from dual
union all
select '81' unit_id, '0' parent_id, '2' unit_type_id, '吨' unit_name
from dual
union all
select '61' unit_id, '81' parent_id, '2' unit_type_id, '公斤' unit_name
from dual)
select lpad(' ', (level - 1) * 4, ' ') || name name, pid, id
from (select 'P' || unit_type_id id, '-1' pid, unit_type_name name
from t_pub_unit_type t
union all
select unit_id,
decode(parent_id, '0', 'P' || unit_type_id, parent_id),
unit_name
from t_pub_unit u)
start with pid = '-1'
connect by pid = prior id;