当前位置: 代码迷 >> Sql Server >> 怎么用一句SQL获取所有的机构的上级 上上级 上上上级 直到根机构
  详细解决方案

怎么用一句SQL获取所有的机构的上级 上上级 上上上级 直到根机构

热度:4   发布时间:2016-04-24 09:57:00.0
如何用一句SQL获取所有的机构的上级 上上级 上上上级 直到根机构
本帖最后由 redcn2004 于 2014-09-29 19:00:07 编辑

CREATE TABLE [dbo].[Org](
[OrgID] [numeric](18, 0) IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[ParentID] [int] NULL,
[OrgType] [int] NULL,
[OrgName] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_ORGANIZATION] PRIMARY KEY CLUSTERED 
(
[OrgID] ASC
)
insert into Org values(0,99,'XX大学')
insert into Org values(1,50,'财务科')
insert into Org values(1,50,'教务处')
insert into Org values(3,40,'学院一')
insert into Org values(3,40,'学院二')
insert into Org values(4,30,'XX系一')
insert into Org values(5,30,'AB系')
insert into Org values(6,20,'2020班级')
insert into Org values(7,20,'2021班级')


结果是:
  班级名     系名      学院名    科室名     学校名
2020班级 XX系一   学院一  教务处     XX大学
2021班级 AB系     学院二   教务处    XX大学


------解决思路----------------------
下面的sql是一個笨方法,效率不高,但能實現你的結果.

select orgname as '班级',(select orgname from Org where OrgID=a.ParentID)as '系名',
(select b.OrgName from org b where OrgID=(select ParentID from Org where OrgID=a.ParentID)) '学院名',
(select c.orgname from Org c where OrgID=(select b.ParentID from org b where OrgID=(select ParentID from Org where OrgID=a.ParentID))) as '科室名',
(select d.orgname from Org d where OrgID=(select c.ParentID from Org c where OrgID=(select b.ParentID from org b where OrgID=(select ParentID from Org where OrgID=a.ParentID)))) as '学校名'
 from Org as a where OrgType=20
  相关解决方案