欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

求两条sql语句,解决思路

更新时间: 2014-01-05 02:17:44 责任编辑: Author_N1

 

求两条sql语句,
表a

指标序号  上级指标  指标说明
  1         0      aaa
  2         0      bbb
  3         1      ccc
  4         2      ddd
  5         3      eee
  6         4      fff

第一条,给出指标序号6,得出他的最顶级指标2,如下
2 0 bbb

第二条,给出指标序号2,得出他及他的下属指标
2  0 bbb
4  2 ddd
6  4 fff

  
--参考方法--

IF OBJECT_ID(N'表a',N'U') IS NOT NULL
DROP TABLE 表a
CREATE TABLE  表a(指标序号 INT ,上级指标 INT,指标说明 VARCHAR(100))
INSERT INTO 表a
 SELECT  1,0,'aaa'
 UNION ALL 
 SELECT
  2         ,0      ,'bbb'
   UNION ALL 
 SELECT
  3         ,1      ,'ccc'
   UNION ALL 
 SELECT
  4         ,2      ,'ddd'
   UNION ALL 
 SELECT
  5         ,3      ,'eee'
   UNION ALL 
 SELECT
  6         ,4      ,'fff'
GO

Declare @Id Int 

SET @ID = 6  
;WITH ParentNodeCTE AS
(
  SELECT 指标序号 , 上级指标 , 指标说明 
  FROM 表a
  WHERE 指标序号 = @ID
  UNION ALL
  SELECT a.指标序号 , a.上级指标 , a.指标说明 
  FROM 表a AS a JOIN ParentNodeCTE AS b ON a.指标序号 = b.上级指标
)
SELECT  TOP 1 * FROM ParentNodeCTE  ORDER BY 指标序号

 
---------------------------------------------------------------------
Set @Id = 2;    
With RootNodeCTE(指标序号,上级指标,指标说明) 
As 

Select 指标序号,上级指标,指标说明 From 表a Where 指标序号 IN (@Id)
Union All 
Select 表a.指标序号,表a.上级指标,表a.指标说明 From RootNodeCTE 
Inner Join 表a
On RootNodeCTE.指标序号 = 表a.上级指标 

Select * From   RootNodeCTE


/*
指标序号        上级指标        指标说明
----------- ----------- ----------------------------------------------------------------------------------------------------
2           0           bbb

(1 行受影响)

指标序号        上级指标        指标说明
----------- ----------- ----------------------------------------------------------------------------------------------------
2           0           bbb
4           2           ddd
6           4           fff

(3 行受影响)
*/
 

--参考方法--

CREATE TABLE #t(id INT,pid INT ,c VARCHAR(10))

INSERT INTO #T SELECT 1,0,'aaa' UNION ALL
SELECT 2,0,'bbb' UNION ALL 
SELECT 3,1,'ccc' UNION ALL 
SELECT 4,2,'ddd' UNION ALL
SELECT 5,3,'eee' UNION ALL 
SELECT 6,4,'fff' ;

-- 给6
;WITH cte AS (
SELECT * FROM #t WHERE id=6
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:44
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8131/
本文WWW.DOC100.NET DOC100.NET版权所有。