有一个表中的数据是这样的;
内码 原因 个数
101 外观不清 3
101 功能不全 2
102 外观不清 3
现要转化为
内码 结论
101 外观不清3,功能不全2
102 外观不清3也就是变为一个内码一条记录,把原因和个数拼在一起变为结论,这个如何实现呢?
内码 原因 个数
101 外观不清 3
101 功能不全 2
102 外观不清 3
现要转化为
内码 结论
101 外观不清3,功能不全2
102 外观不清3也就是变为一个内码一条记录,把原因和个数拼在一起变为结论,这个如何实现呢?
--建立測試環境
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
*/
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