2张表,主从表A主表:
[FID]     [FName]
001       王五
002       刘能
003       张飞B从表:
[FID] [FParentID] [科目]
1        001             数学
2        001             英语
3        001  物理
4        002             化学我想得到结果:
001 王五 数学/英语/物理
002     刘能 化学
003     张飞      空

解决方案 »

  1.   

    select *,isnull(stuff((select '/'+[科目] from b where b.[FParentID]=a.[FID] for xml path('')),1,1,''),'空') from a
      

  2.   


    --A主表:
    IF(OBJECT_ID('TA') IS NOT NULL) DROP TABLE TA
    CREATE TABLE TA(FID VARCHAR(10),FName VARCHAR(20))
    INSERT INTO TA 
    SELECT '001','王五' UNION ALL
    SELECT '002','刘能' UNION ALL
    SELECT '003','张飞'
    --B从表
    IF(OBJECT_ID('TB') IS NOT NULL) DROP TABLE TB
    CREATE TABLE TB (FID INT,[FParentID] VARCHAR(10),[科目] VARCHAR(20))
    INSERT INTO TB
    SELECT 1,'001','数学' UNION ALL
    SELECT 2,'001','英语' UNION ALL
    SELECT 3,'001','物理' UNION ALL
    SELECT 4,'002','化学'  
     --结果
    SELECT TA.FID,TA.FName,ISNULL(C.Courses,'空') AS 科目 FROM TA 
    LEFT JOIN (
     SELECT B.FParentID,STUFF((SELECT '/'+A.科目 FROM TB AS A WHERE A.FParentID=B.FParentID FOR XML PATH(''))
       ,1
       ,1
       ,'') AS Courses
     FROM TB  AS B
    GROUP BY B.FParentID)AS C ON (TA.FID=C.FParentID)
    /*
    FID        FName                科目
    ---------- ------------------------------------- 
    001        王五                   数学/英语/物理
    002        刘能                   化学
    003        张飞                   空(3 行受影响)
    */
      

  3.   


    --构造测试数据
    if object_id('[A]') is not null drop table [A]
    go
    create table [A]([FID] varchar(3),[FName] varchar(4))
    insert [A]
    select '001','王五' union all
    select '002','刘能' union all
    select '003','张飞'
    go
    if object_id('[B]') is not null drop table [B]
    go
    create table [B]([FID] int,[FParentID] varchar(3),[科目] varchar(4))
    insert [B]
    select 1,'001','数学' union all
    select 2,'001','英语' union all
    select 3,'001','物理' union all
    select 4,'002','化学'
    go--创建函数
    create function [dbo].[F_Str](@pid int) 
    returns nvarchar(1000) 
    as 
    begin 
        declare @S nvarchar(100) 
        select @S=isnull(@S+'/','')+科目 from B where FParentID=@pid
        return @S 
    end 
    go--查询
    SELECT *,科目=dbo.f_str(fid) FROM A--查询结果
    /**
    FID  FName 科目
    ---- ----- ------------------------
    001  王五    数学/英语/物理
    002  刘能    化学
    003  张飞    NULL(3 行受影响)
    **/