各位大侠,小弟有个难题需要各位指导一二。
我想要通过一张基础表,如下
ID Name ParentID
1 英语 0
2 生物 0
3 计算机 0
4 口语 1
5 听力 1
6 数据库 3
7 软件工程 3
8 SQL Server 6
9 Oracle 6
10 李阳口语 4
11 李阳听力 5
12 李阳口语365句 10
… … …
… … …得到想要的结果表如下,ID Name name name name name
12 李阳口语365句 英语 口语 李阳口语 李阳口语365句
11 李阳听力 英语 听力 李阳听力
8 SQL Server 计算机 数据库 实际应该是一个N级递归的问题,请问我该如何写啊,谢谢
我想要通过一张基础表,如下
ID Name ParentID
1 英语 0
2 生物 0
3 计算机 0
4 口语 1
5 听力 1
6 数据库 3
7 软件工程 3
8 SQL Server 6
9 Oracle 6
10 李阳口语 4
11 李阳听力 5
12 李阳口语365句 10
… … …
… … …得到想要的结果表如下,ID Name name name name name
12 李阳口语365句 英语 口语 李阳口语 李阳口语365句
11 李阳听力 英语 听力 李阳听力
8 SQL Server 计算机 数据库 实际应该是一个N级递归的问题,请问我该如何写啊,谢谢
SQL Server 中树形表数据的处理总结
http://blog.csdn.net/xys_777/archive/2010/06/15/5672481.aspx
后面有例子
1 英语 0
2 生物 0
3 计算机 0
4 口语 1
5 听力 1
6 数据库 3
7 软件工程 3
8 SQL Server 6
9 Oracle 6
10 李阳口语 4
11 李阳听力 5
12 李阳口语365句 10
… … …
… … …
不好意思,我的错,最后的结果写的有问题,应该是这样的,
ID Name name name name
12 李阳口语365句 英语 口语 李阳口语
11 李阳听力 英语 听力
8 SQL Server 计算机 数据库
..
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([ID] [int],[Name] [nvarchar](20),[ParentID] [int])
INSERT INTO [tb]
SELECT '1','英语','0' UNION ALL
SELECT '2','生物','0' UNION ALL
SELECT '3','计算机','0' UNION ALL
SELECT '4','口语','1' UNION ALL
SELECT '5','听力','1' UNION ALL
SELECT '6','数据库','3' UNION ALL
SELECT '7','软件工程','3' UNION ALL
SELECT '8','SQL Server','6' UNION ALL
SELECT '9','Oracle','6' UNION ALL
SELECT '10','李阳口语','4' UNION ALL
SELECT '11','李阳听力','5' UNION ALL
SELECT '12','李阳口语365句','10'--SELECT * FROM [tb]-->SQL查询如下:
;WITH t AS
(
SELECT Name1 = Name,ID1=ID, *
FROM tb t
WHERE NOT EXISTS(
SELECT 1
FROM tb
WHERE ParentID = t.ID
)
UNION ALL
SELECT b.Name1,ID1,a.*
FROM tb a
JOIN t b
ON a.ID = b.ParentID
),
t1 AS
(
SELECT rn=ROW_NUMBER()OVER(PARTITION BY Name1 ORDER BY ID),ID1,Name1,Name
FROM t
WHERE name<>name1
)
SELECT ID=ID1,Name1,Name2=[1],Name3=[2],Name4=[3]
FROM t1
PIVOT(MAX(Name) FOR rn IN([1],[2],[3])) b
ORDER BY 1 DESC
/*
ID Name1 Name2 Name3 Name4
----------- -------------------- -------------------- -------------------- --------------------
12 李阳口语365句 英语 口语 李阳口语
11 李阳听力 英语 听力 NULL
9 Oracle 计算机 数据库 NULL
8 SQL Server 计算机 数据库 NULL
7 软件工程 计算机 NULL NULL(5 行受影响)
*/先看一下这个效果是不是你要的。