在主页中做一treeview,表结构如下:
nodeid name parentid
1 广东 0
2 广西 0
3 湖南 0
4 广州 1
5 中山 1
6 番禺 1
7 南宁 2
8 桂林 2
9 柳州 2
10 长沙 3现想让它如下显示:
nodeid name parentid
1 广东 null
2 广西 null
3 湖南 null
4 广州 广东
5 中山 广东
6 番禺 广东
7 南宁 广西
8 桂林 广西
9 柳州 广西
10 长沙 湖南我写的sql语句有问题,现请教大家,谢谢。
nodeid name parentid
1 广东 0
2 广西 0
3 湖南 0
4 广州 1
5 中山 1
6 番禺 1
7 南宁 2
8 桂林 2
9 柳州 2
10 长沙 3现想让它如下显示:
nodeid name parentid
1 广东 null
2 广西 null
3 湖南 null
4 广州 广东
5 中山 广东
6 番禺 广东
7 南宁 广西
8 桂林 广西
9 柳州 广西
10 长沙 湖南我写的sql语句有问题,现请教大家,谢谢。
-- Author :SQL77(只为思齐老)
-- Date :2010-03-26 08:56:20
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
go
create table #TB([nodeid] int,[name] varchar(4),[parentid] int)
insert #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,'番禺',1 union all
select 7,'南宁',2 union all
select 8,'桂林',2 union all
select 9,'柳州',2 union all
select 10,'长沙',3
--------------开始查询--------------------------select NODEID,NAME,(SELECT NAME FROM #TB WHERE NODEID=T.PARENTID)NAME from #TB T
----------------结果----------------------------
/* (所影响的行数为 10 行)NODEID NAME NAME
----------- ---- ----
1 广东 NULL
2 广西 NULL
3 湖南 NULL
4 广州 广东
5 中山 广东
6 番禺 广东
7 南宁 广西
8 桂林 广西
9 柳州 广西
10 长沙 湖南(所影响的行数为 10 行)
*/
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
--> Author : wufeng4552
--> Date : 2010-03-26 09:01:04
if not object_id('tb') is null
drop table tb
Go
Create table tb([nodeid] int,[name] nvarchar(2),[parentid] int)
Insert tb
select 1,N'广东',0 union all
select 2,N'广西',0 union all
select 3,N'湖南',0 union all
select 4,N'广州',1 union all
select 5,N'中山',1 union all
select 6,N'番禺',1 union all
select 7,N'南宁',2 union all
select 8,N'桂林',2 union all
select 9,N'柳州',2 union all
select 10,N'长沙',3
Go
Select a.nodeid,
a.name,
b.name
from tb a left join tb b
on b.[nodeid]=a.[parentid]
/*
nodeid name name
----------- ---- ----
1 广东 NULL
2 广西 NULL
3 湖南 NULL
4 广州 广东
5 中山 广东
6 番禺 广东
7 南宁 广西
8 桂林 广西
9 柳州 广西
10 长沙 湖南(10 個資料列受到影響)
*/
-- Author : htl258(Tony)
-- Date : 2010-03-26 08:59:31
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:treeviewIF NOT OBJECT_ID('[treeview]') IS NULL
DROP TABLE [treeview]
GO
CREATE TABLE [treeview]([nodeid] INT,[name] NVARCHAR(10),[parentid] INT)
INSERT [treeview]
SELECT 1,N'广东',0 UNION ALL
SELECT 2,N'广西',0 UNION ALL
SELECT 3,N'湖南',0 UNION ALL
SELECT 4,N'广州',1 UNION ALL
SELECT 5,N'中山',1 UNION ALL
SELECT 6,N'番禺',1 UNION ALL
SELECT 7,N'南宁',2 UNION ALL
SELECT 8,N'桂林',2 UNION ALL
SELECT 9,N'柳州',2 UNION ALL
SELECT 10,N'长沙',3
GO
--SELECT * FROM [treeview]-->SQL查询如下:
;with t as
(
select nodeid,cast(name as nvarchar(100)) name,parentid from treeview where parentid=0
union all
select a.nodeid,CAST(a.name+' '+b.name as nvarchar(100)),a.parentid
from treeview a join t b on a.parentid=b.nodeid
)
select * from t order by 1
/*
nodeid name parentid
1 广东 0
2 广西 0
3 湖南 0
4 广州 广东 1
5 中山 广东 1
6 番禺 广东 1
7 南宁 广西 2
8 桂林 广西 2
9 柳州 广西 2
10 长沙 湖南 3
*/
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-03-26 09:01:11
-- Verstion:
-- Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86)
-- May 26 2009 14:24:20
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([nodeid] int,[name] varchar(4),[parentid] int)
insert [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,'番禺',1 union all
select 7,'南宁',2 union all
select 8,'桂林',2 union all
select 9,'柳州',2 union all
select 10,'长沙',3
--------------开始查询--------------------------
Select
a.nodeid,a.name,b.name as parentid
from
tb a left join tb b
on
b.[nodeid]=a.[parentid]
----------------结果----------------------------
/*nodeid name parentid
----------- ---- --------
1 广东 NULL
2 广西 NULL
3 湖南 NULL
4 广州 广东
5 中山 广东
6 番禺 广东
7 南宁 广西
8 桂林 广西
9 柳州 广西
10 长沙 湖南(10 行受影响)
*/
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,'番禺',1 union all
select 7,'南宁',2 union all
select 8,'桂林',2 union all
select 9,'柳州',2 union all
select 10,'长沙',3select a.nodeid,a.name,b.name
from tree as a left join tree as b on a.parentid = b.nodeid
-- Author : htl258(Tony)
-- Date : 2010-03-26 08:59:31
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:treeviewIF NOT OBJECT_ID('[treeview]') IS NULL
DROP TABLE [treeview]
GO
CREATE TABLE [treeview]([nodeid] INT,[name] NVARCHAR(10),[parentid] INT)
INSERT [treeview]
SELECT 1,N'广东',0 UNION ALL
SELECT 2,N'广西',0 UNION ALL
SELECT 3,N'湖南',0 UNION ALL
SELECT 4,N'广州',1 UNION ALL
SELECT 5,N'中山',1 UNION ALL
SELECT 6,N'番禺',1 UNION ALL
SELECT 7,N'南宁',2 UNION ALL
SELECT 8,N'桂林',2 UNION ALL
SELECT 9,N'柳州',2 UNION ALL
SELECT 10,N'长沙',3
GO
--SELECT * FROM [treeview]-->SQL查询如下:
--如果只有两级
select [nodeid],name+' '+ISNULL((select top 1 name from treeview where t.parentid=nodeid),'') name,parentid
from treeview t
/*
nodeid name parentid
1 广东 0
2 广西 0
3 湖南 0
4 广州 广东 1
5 中山 广东 1
6 番禺 广东 1
7 南宁 广西 2
8 桂林 广西 2
9 柳州 广西 2
10 长沙 湖南 3
*/
select [nodeid],name+' '+ISNULL((select top 1 name from treeview where t.parentid=nodeid),'NULL') name,parentid
from treeview t
/*
nodeid name parentid
1 广东 NULL 0
2 广西 NULL 0
3 湖南 NULL 0
4 广州 广东 1
5 中山 广东 1
6 番禺 广东 1
7 南宁 广西 2
8 桂林 广西 2
9 柳州 广西 2
10 长沙 湖南 3
*/一定要显示NULL就这样.
(
nodeid INT,
[name] VARCHAR(20),
parentid VARCHAR(20)
)
GOINSERT INTO A1
SELECT 1,'广东','0'
UNION
SELECT 2,'广西','0'
UNION
SELECT 3,'湖南','0'
UNION
SELECT 4,'广州','1'
UNION
SELECT 5,'中山','1'
UNION
SELECT 6,'番禺','1'
UNION
SELECT 7,'南宁','2'
UNION
SELECT 8,'桂林','2'
UNION
SELECT 9,'柳州','2'
UNION
SELECT 10,'长沙','3'
GOSELECT nodeid,[name],parentid=(SELECT b.[name] from A1 b WHERE b.nodeid=a.parentid)
FROM A1 a
SELECT a.NodeId as NodeId, a.DisplayName as DisplayName,(SELECT top 1 a.DisplayName FROM TYPE b WHERE b.parentnodeid=a.nodeid AND a.parentnodeid='0') as ParentNodeId FROM TYPE a