有一个表结构和数据如下:
CODE NAME
--------------- ----------------------------------------
209 城市与环境学院
209100 2007级
209101 2008级
209102 2009级
209103 2010级
209104 2011级
209105 2012级
想得到下面的结果,应该怎么办
CODE NAME FullName
--------------- ---------------------------------------- ----------------------------------------------------
209 城市与环境学院 城市与环境学院
209100 2007级 城市与环境学院,2007级
209101 2008级 城市与环境学院,2008级
209102 2009级 城市与环境学院,2009级
209103 2010级 城市与环境学院,2010级
209104 2011级 城市与环境学院,2011级
209105 2012级 城市与环境学院,2012级
------最佳解决方案--------------------
什么数据库?假设MYSQL
SELECT CODE,NAME,NAME WHERE LENGTH(CODE)=3
UNION ALL
SELECT CODE,NAME,concat((SELECT CODE,NAME,NAME WHERE LENGTH(CODE)=3),',',name)
sqlserver
SELECT CODE,NAME,NAME WHERE LENGTH(CODE)=3
UNION ALL
SELECT CODE,NAME,((SELECT CODE,NAME,NAME WHERE LENGTH(CODE)=3)+','+name)
------其他解决方案--------------------
SELECT CODE,NAME,NAME from tt WHERE LENGTH(CODE)=3
UNION ALL
select * from (
SELECT CODE,NAME,((SELECT CODE,NAME,NAME WHERE LENGTH(CODE)=3)
------其他解决方案--------------------
我的本意是这样的,这个表包含两个字段
Code varchar2(15)
Name varchar2(40)
Code是部门代码,每一级部门是3位长,所以Code最多可以表示5级部门,Code的值是如下形式的:
100
100100
100100100
100100100100
100100100100100
100101
100101100
100101100101
100101100101100
Name是当前这级部门的名称
我现在要要得到的是某个部门的完整的名称,即把他的上级部门名称拼到前面。表内容如下:
Code Name
100 一
100100 二
100100100 三
100100100100 四
100100100100100 五
我要得到的结果是:
Code Name 完整名称
100 一 一
100100 二 一二
100100100 三 一二三
100100100100 四 一二三四
100100100100100 五 一二三四五