
已解决问题
谷歌moshengdian用户在2013.12.31提交了关于“长安诺sql中一对多关系的查询结果的多行转换成一行多列”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-12-17T21:49:52。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,我不知道说什么才好,除了谢谢 !
详细问题描述及疑问:期待您的答案,我不知道说什么才好,除了谢谢 !
--用动态sql实现行转列。因用到了row_**mber,只适用于sqlserver2005及以上版本
--测试**
with
[user](ID,name,roleid)
as(
select1,'bobo','r1'unionall
select2,'coco','r1'unionall
select3,'dodo','r1'unionall
select4,'eoeo','r2'unionall
select5,'fofo','r2'),
[role](ID,name)
as(
select'r1','admin'unionall
select'r2','user')
--两表联合查询后暂存入临时表
selectb.IDroleid,b.namerolename,a.nameusername,row_**mber()over(partitionbyb.IDorderbya.ID)seq
into#t
from[user]a
innerjoin[role]bona.roleid=b.ID;
--拼接动态sql
declare@sqlvarchar(max);
set@sql='';
select@sql=@sql+
',max(caseseqwhen'+cast(tt.seqasvarchar)+'thenusernameelse''''end)user'+cast(tt.seqasvarchar)
from(selectdistinctseqfrom#t)tt
orderbyseq;
set@sql='selectrolename'+@sql+'from#tgroupbyroleid,rolename';
--打印动态sql
select@sql;
--执行动态sql
exec(@sql);
--删除临时表
droptable#t;
生成的动态sql为:
selectrolename,最终查询结果为: