學號 選修課
07001 语文
07001 数学
07001 英语
查詢結果
學號 選修課
07001 語文;數學;英語
------解决方案--------------------
create function dbo.uf_gets(@学号 varchar(10))
returns varchar(100)
as
begin
declare @s varchar(100)
set @s= ' '
select @[email protected]+ '; '+选修课 from 表 where [email protected]
set @s=stuff(@s,1,1, ' ')
return @s
end
go
select 学号,dbo.uf_gets(学号) as '选修课 ' from 表
------解决方案--------------------
用函数是可以的,你要考虑效率,用case 语句吧,
你要看例子,在我的qq群32097372 里面有专门的文章,其实你的问题是竖表变横表,
我发现论坛里面有很多这样的帖子,有兴趣加我的qq群
------解决方案--------------------
你用我的表測試:
借用你的函數:
CREATE FUNCTION dbo.uf_gets(@name varchar(100)) RETURNS varchar(100)
AS BEGIN DECLARE @s varchar(100)
SET @s = ' '
SELECT @s = @s + '; ' + name1
FROM ytest
WHERE name2 = @name
SET @s = stuff(@s, 1, 1, ' ') RETURN @s
END
表結構
name1 char (10),
name2 char(10),
[value] char(10)
內容:
name1 name2 value
1 2 2
2 2 1
3 2
4 5 2
測試:
select name2, dbo.uf_gets(2) from ytest group by name2
你再試下呢?
------解决方案--------------------
傳學號就是對表中所有學號對應的課程名稱進行合併,如果傳一個具體值就只合併那一個學號所對應的課程名稱了
你把這個函數看成是sum()函數就行了,功能是一樣的