表自己跟自己关联,fid=filedclassid
然后参考这个帖子里面5楼的做法
http://bbs.csdn.net/topics/390677722

解决方案 »

  1.   

    抄zjcxc大神的一个方法
    CREATE FUNCTION f_cid(@FileClassid int)
    RETURNS TABLE
    AS
    RETURN(
        WITH tb_tree([FileClassid],[level])
        AS(
            SELECT [FileClassid],1 FROM [tb_tree]
            WHERE [fid]=@id
            UNION ALL
            SELECT A.[FileClassid],B.[level]+1
            FROM [表名] A,tb_tree B
            WHERE A.[fid]=B.[FileClassid])
        SELECT * FROM tb_tree
    )
    go
    select classname,s,fileclassid,fid,
    stuff((
    SELECT ','+a.详细信息
    FROM [表名] A,f_cid(c.FileClassid)B
    WHERE A.[FileClassid]=B.[FileClassid]
    for xml path('')),1,1,'') as 详细信息
    from [表名] c
      

  2.   

    f_cid 重改下CREATE FUNCTION f_cid(@id int)
    RETURNS TABLE
    AS
    RETURN(
        WITH tb_tree([FileClassid],[level])
        AS(
            SELECT [FileClassid],0 FROM [表名]
            WHERE [id]=@id
            UNION ALL
            SELECT [FileClassid],1 FROM [表名]
            WHERE [fid]=@id
            UNION ALL
            SELECT A.[FileClassid],B.[level]+1
            FROM [表名] A,tb_tree B
            WHERE A.[fid]=B.[FileClassid])
        SELECT * FROM tb_tree
    )
      

  3.   

    这运行出来的结果是啥?
    一个表
    自己的id和子ID
      

  4.   

    f_cid方法改了没
    用后面的
    前面的我写错了
      

  5.   

    我最终实现了,是用两条sql语句,一条实现起来太麻烦了,所以谢了两条,一条得到所有父类名称,另外一条得到指定父类ID的所有信息,然后两个结果拼接到页面前台显示就OK了  结果出来了。
      

  6.   

    用CIT递归就可以实现,问题需求很简单,但被楼主整的很麻烦了,要在字符串中提取数字处理再合并