关于多行合并成一行的问题

kveknsin12 2011-06-07 03:53:57
表如下:
id 业绩
5234 5
5234 9
5234 4
5236 1
5236 8

我做了个查询语句,如下:
GO
CREATE FUNCTION dbo.fn_strSum(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @values varchar(8000)
SET @values = ''
SELECT @values = @values + ',' + 业绩 FROM table WHERE id=@id
RETURN STUFF(@values, 1, 1, '')
END
GO

-- 调用函数
SELECT id, 业绩 = dbo.fn_strSum(id) FROM table GROUP BY id
DROP FUNCTION dbo.fn_strSum

输出的结果是:
id 业绩
5234 5,9,4
5236 1,8
和我想要的输出结果还是有点差别:
[color=#FF0000]我想把相同的id的业绩合并成一行,输出的结果如下:
id 业绩1 业绩2 业绩3
5234 5 9 4
5236 1 8
有多少列业绩是不确定的。我知道论坛很多高手,能帮忙改进下查询语句吗?
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
playwarcraft 2011-06-07
  • 打赏
  • 举报
回复

Create table T(id int,yj int)
insert into T select 5234, 5
insert into T select 5234, 9
insert into T select 5234, 4
insert into T select 5236, 1
insert into T select 5236, 8
GO
Select sortid = row_number() over(partition by id order by getdate()),*
into #T
from T
order by id

declare @sql varchar(max)
set @sql=''
select @sql=@sql+',max(case when sortid='+rtrim(sortid)+' then rtrim(yj) else '''' end) as [YJ'+rtrim(sortid)+']'
from #T
group by rtrim(sortid)

select @sql='select id'+@sql+' from #T group by id'

exec(@sql)

/**
id YJ1 YJ2 YJ3
----------- ------------ ------------ ------------
5234 5 9 4
5236 1 8
**/
Drop table #T
Drop table T

kveknsin12 2011-06-07
  • 打赏
  • 举报
回复
有人帮忙吗?
kveknsin12 2011-06-07
  • 打赏
  • 举报
回复
2楼我看了,不符合,它知道有哪几门课程,但是我的是不知道有多少行业绩的。请大家仔细看看
kveknsin12 2011-06-07
  • 打赏
  • 举报
回复
我初学,找了半天才找到上面语句,还差点,请帮帮忙
FlySQL 2011-06-07
  • 打赏
  • 举报
回复
动态sql,行转列,论坛搜搜一大堆

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧