用sql把一列数据拼成一个字符串

用在子查询中,如果有多条数据则把这些数据拼成一条来查询出来  
  例如   表1   学生信息(   ID           Name)  
                                        1             张三  
            表2   学生课程(   PK           StudentID           Course)  
                                        1             1                           高数  
                                        2             1                           线代    
   
  然后通过一条查询得到  
  ID           Name           Course  
  1             张三           高数|线代  
  这样一个结果

 

 

 

 

 

 

create   function   f_str(@ID   int)  
  returns   varchar(8000)  
  AS  
  begin  
      declare   @ret   varchar(8000)  
      set   @ret   =   ''  
      select   @ret   =   @ret+'|'+rtrim(Course)   from   学生课程   where   StudentID   =   @ID  
      set   @ret   =   case   when   len(@ret)>0   then   stuff(@ret,1,1,'')   else   @ret   end  
      return   @ret    
  end  
   
   
  select  
          a.ID,a.Name,Course=dbo.f_str(a.ID)  
  from  
          学生信息   a  
  group   by  
          a.ID,a.Name

 

 

 

 

 

 

 

--生成测试数据  
  create   table   学生信息(ID   int,Name   varchar(10))  
  create   table   学生课程(PK   int,StudentID   int,Course   varchar(10))  
   
  insert   into   学生信息   select   1,'张三'  
   
  insert   into   学生课程   select   1,1,'高数'  
  insert   into   学生课程   select   2,1,'线代'    
   
   
  --创建自定义函数  
  create   function   f_str(@ID   int)  
  returns   varchar(8000)  
  AS  
  begin  
      declare   @ret   varchar(8000)  
      set   @ret   =   ''  
      select   @ret   =   @ret+'|'+rtrim(Course)   from   学生课程   where   StudentID   =   @ID  
      set   @ret   =   case   when   len(@ret)>0   then   stuff(@ret,1,1,'')   else   @ret   end  
      return   @ret    
  end  
   
   
  --调用自定义函数执行查询  
  select  
          a.ID,a.Name,Course=dbo.f_str(a.ID)  
  from  
          学生信息   a  
  group   by  
          a.ID,a.Name  
   
   
  /*  
  --输出查询结果  
  ID           Name             Course  
  ----       ------         ---------  
  1             张三             高数|线代  
  */

 

 

 

--建立测试环境  
  Create   Table   学生信息  
  (ID Int,  
    Name Nvarchar(10))  
   
  Create   Table   学生课程  
  (PK Int,  
    StudentID Int,  
    Course Nvarchar(20))  
  --插入数据  
  Insert   学生信息   Values(1,             N'张三')  
   
  Insert   学生课程   Values(1,             1,                           N'高数')  
  Insert   学生课程   Values(2,             1,                           N'线代')  
  GO  
  --建立函数  
  Create   Function   GetCourse(@ID Int)    
  Returns   Nvarchar(1000)  
  As  
  Begin  
          Declare   @S   Nvarchar(1000)  
          Set   @S=''  
          Select   @S=@S+'|'+Course   from   学生课程   Where   StudentID=@ID   Order   By   PK  
          Return(Stuff(@S,1,1,''))  
  End  
  GO  
  --测试  
  Select   *,dbo.GetCourse(ID)   As   Course   from   学生信息  
  --删除测试环境  
  Drop   Table   学生信息,学生课程  
  Drop   Function   GetCourse  
  --结果  
  /*  
  ID Name Course  
  1 张三 高数|线代  
  */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值