当前位置:首页 » 编程语言 » sql多行转多列

sql多行转多列

发布时间: 2024-11-02 19:17:52

‘壹’ sql中一对多关系的查询结果的多行转换成一行多列

--用动态sql实现行转列。因用到了row_number,只适用于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_number()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,
max(caseseqwhen1thenusernameelse''end)user1,
max(caseseqwhen2thenusernameelse''end)user2,
max(caseseqwhen3thenusernameelse''end)user3
from#tgroupbyroleid,rolename

最终查询结果为:

‘贰’ sql多行多列合并成一行多列,

您好利用分析函数 sum max min 等均可实现此功能(oracle 中 空值不参与大小比较(11g是这样的 其他版本需要你自己测试相爱))
如:
select 产品, max(标价),max(二标价),max(三标价) from table group by 产品;
或者
select 产品, sum(标价)),sum(二标价),sum(三标价) from table group by 产品;

热点内容
罗布乐思账号密码手机号多少 发布:2025-01-11 18:00:55 浏览:401
在广州什么配置的车才能跑滴滴 发布:2025-01-11 18:00:52 浏览:891
安卓手机哪个生态好 发布:2025-01-11 17:56:01 浏览:272
数据库数据的一致性 发布:2025-01-11 17:30:45 浏览:708
手机怎么设置手势安卓 发布:2025-01-11 17:15:54 浏览:965
威能壁挂炉解压阀 发布:2025-01-11 17:15:53 浏览:560
突破服务器ip限制 发布:2025-01-11 17:11:23 浏览:819
支付宝上传凭证 发布:2025-01-11 17:10:29 浏览:877
怎么打开行李箱的密码锁 发布:2025-01-11 17:09:51 浏览:594
苹果怎么删除id账号和密码 发布:2025-01-11 17:09:50 浏览:785