建议用游标实现。
我给你写了一个函数,你仔细看吧。
-- =============================================
-- Author: TLJ
-- Create date: 01/04/2011
-- Description: undefined
-- =============================================
create function [dbo].[getcourses](@name nvarchar(10))
returns nvarchar(100)
as
begin
declare @result nvarchar(100)
declare @temp nvarchar(100)
if(@name is null)
set @result=null
declare mc cursor for select ltrim(rtrim(course)) from student where [name]=@name
open mc
begin
fetch next from mc into @temp
set @result=@temp
end
while @@fetch_status=0
begin
if @temp<>@result
set @result=@result+','+@temp
fetch next from mc into @temp
end
close mc
deallocate mc
return @result
end
用游标喽,比较简单。或者使用行列转换算法,比较难。
select *
FROM course
pivot(max(course)
for course in ([语文],[数学],[英语],[计算机],[几何])) as c
如果有多个course 就要在for 后面输入多个cousre的具体值,经过这步后在进行简单的处理就可以了。经过我测试没问题的。