新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用decode循环读出所有资料
创新互联公司专注骨干网络服务器租用十余年,服务更有保障!服务器租用,服务器托管 成都服务器租用,成都服务器托管,骨干网络带宽,享受低延迟,高速访问。灵活、实现低成本的共享或公网数据中心高速带宽的专属高性能服务器。
SELECT categorid FROM
(SELECT categorid,
DECODE
(categorid,ParentID , NULL,ParentID ) ParentID
FROM table) t
START WITH categorid= ‘’
CONNECT BY PRIOR t.categorid= t.ParentID
试一下吧
你的数据库是什麽 这个是Oracle下的语法,抱歉 没说清楚
Decode只有Oracle有提供,SQLServer不太清楚,不然写过简单的SP调用一下吧 用Sp把资料都循环出来组个串传出来好了
你的需求讲的很清楚,如果SQLServer中没有相关函数直接使用 还不如写个SP调用
加多一列层级码,会简单很多比如亚洲用‘01’ 中国用‘0101’,北京用‘010101‘,海定用‘01010101’,东城用’01010102‘
这样语句可以
select id as col1,(select name from 表 where code = SubString(a.Code, 1,2)) as col2,
(select name from 表 where code = SubString(a.Code, 3,2)) as col3,
(select name from 表 where code = SubString(a.Code, 5,2)) as col4,
(select name from 表 where code = SubString(a.Code, 7,2)) as col5
from 表 a where Type = 'Distric'
不然
(select d.name from 表 b, 表 c, 表 d where a.parentid = b.id and b.parentid = c.id
and c.parentid = d.id) as col2,...
写起来比较麻烦
Oracle 可采用下面这种写法:
SELECT
LPAD(' ', 2*(LEVEL-1)) || brandname AS name
FROM
表
START WITH
brandid = 1
CONNECT BY PRIOR brandid = brandparentid;