有一个表中的数据是这样的;
内码        原因        个数
101        外观不清     3
101        功能不全     2
102        外观不清     3
现要转化为
内码        结论
101        外观不清3,功能不全2
102        外观不清3也就是变为一个内码一条记录,把原因和个数拼在一起变为结论,这个如何实现呢?

解决方案 »

  1.   


    --建立測試環境
    Create Table TEST
    (内码 Int,
     原因 Nvarchar(20),
     个数 Int)
    Insert TEST Select 101,        N'外观不清',     3
    Union All Select 101,        N'功能不全',     2
    Union All Select 102,        N'外观不清',     3
    GO
    --建立函數
    Create Function F_Get(@Code Int)
    Returns Nvarchar(1000)
    As
    Begin
    Declare @S Nvarchar(1000)
    Set @S=''
    Select @S=@S+','+原因+Rtrim(个数) From TEST Where 内码=@Code
    Return(Stuff(@S,1,1,''))
    End
    GO
    --測試
    Select 
    内码,
    dbo.F_Get(内码) As  结论
    From TEST 
    Group By 内码
    Go
    --刪除測試環境
    Drop Function F_Get
    Drop Table TEST
    GO
    --結果
    /*
    内码 结论
    101 外观不清3,功能不全2
    102 外观不清3
    */
      

  2.   


    create table tb (内码  int,原因 varchar(50),个数 int) 
    insert into tb select  101        ,'外观不清'     ,3
    union all select 101        ,'功能不全'     ,2
    union all select 102        ,'外观不清'     ,3
    go
           
    create function dbo.fc_str(@id int)
    returns varchar(100)
    as
    begin
     declare @sql varchar(1000)
     set @sql=''
     select @sql=@sql+','+cast(原因 as varchar)+cast(个数 as varchar) from tb where 内码=@id
     return stuff(@sql,1,1,'')
    end
    goselect 内码,dbo.fc_str(内码) as 原因 from tb group by 内码
    drop table tb
    drop function dbo.fc_str