在主页中做一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语句有问题,现请教大家,谢谢。

解决方案 »

  1.   

    ----------------------------------------------------------------
    -- 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 行)
    */
      

  2.   

    SELECT a.NodeId as NodeId, a.DisplayName as DisplayName,(SELECT a.DisplayName FROM TYPE b WHERE b.parentnodeid=a.nodeid AND a.parentnodeid='0') as ParentNodeId FROM TYPE a 服务器: 消息 512,级别 16,状态 1,行 3
    子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
      

  3.   

    --> Title  : Generating test data 
    --> 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 個資料列受到影響)
    */
      

  4.   

    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 
      

  5.   

    --------------------------------------------------------------------------
    --  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
    */
      

  6.   

    mugua604 你的那些parentnodeid!=0的不显示呀。
      

  7.   

    ----------------------------------------------------------------
    -- 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 行受影响)
    */
      

  8.   

    create table tree(nodeid int,name varchar(20),parentid int)insert into tree
    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
      

  9.   

    --------------------------------------------------------------------------
    --  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
    */
      

  10.   

    --如果只有两级
    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就这样.
      

  11.   

    CREATE TABLE A1
    (
    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
      

  12.   

    请加TOP 1
    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