SQL语句怎样使查询同一表同一列多条数据分列显示
数据库表1为:编码名称项目序号数额1企业11521企业12371企业13982企业216542企业22572企业23987想要的查询结果显示为编码名称数额(项目序号1)数...
数据库表1为:
编码 名称 项目序号 数额
1 企业1 1 52
1 企业1 2 37
1 企业1 3 98
2 企业2 1 654
2 企业2 2 57
2 企业2 3 987
想要的查询结果显示为
编码 名称 数额(项目序号1) 数额(项目序号3)
1 企业1 52 98
2 企业2 654 987
请问如何实现?
我暂时是将该表连接两次,分别设置项目序号,也可以实现。
即:select 编码,名称,A.数额,B.数额
from 表1 A,表1 B
where A.项目序号=1 and B.项目序号=3
但是这样运行会慢,语句复杂,而且以后项目序号不止两列,可能要多列,甚至十几二十多列,那就要连接多次。
请问哪位有更好的方法? 展开
编码 名称 项目序号 数额
1 企业1 1 52
1 企业1 2 37
1 企业1 3 98
2 企业2 1 654
2 企业2 2 57
2 企业2 3 987
想要的查询结果显示为
编码 名称 数额(项目序号1) 数额(项目序号3)
1 企业1 52 98
2 企业2 654 987
请问如何实现?
我暂时是将该表连接两次,分别设置项目序号,也可以实现。
即:select 编码,名称,A.数额,B.数额
from 表1 A,表1 B
where A.项目序号=1 and B.项目序号=3
但是这样运行会慢,语句复杂,而且以后项目序号不止两列,可能要多列,甚至十几二十多列,那就要连接多次。
请问哪位有更好的方法? 展开
4个回答
展开全部
declare @sql varchar(8000)
set @sql = 'select 编码,名称'
select @sql = @sql+', max(case [项目序号] when '''+cast(项目序号 as varchar)+''' then 数额 else 0 end ) AS [项目序号'+cast(项目序号 as varchar)+']'
from (select distinct 项目序号 from 表名) as a
set @sql = @sql +' from 表名 group by 编码,名称'
select @sql
exec (@sql)
set @sql = 'select 编码,名称'
select @sql = @sql+', max(case [项目序号] when '''+cast(项目序号 as varchar)+''' then 数额 else 0 end ) AS [项目序号'+cast(项目序号 as varchar)+']'
from (select distinct 项目序号 from 表名) as a
set @sql = @sql +' from 表名 group by 编码,名称'
select @sql
exec (@sql)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
让我做的话,我不会在SQL语句里一次完成,无疑直接在Sql上运行会给服务器加大负担,随着时间的增长而变慢。
我的建议是:使用SQL="Select * from dbo.表1"先全部下载下来,再存入数组中,你爱怎么倒腾怎么倒腾,速度绝对比你跑SQL语句快N倍。
我在外企的IT部门工作,当SQL数据量大的时候,我喜欢在SQL上执行最简单的操作,然后在本地做处理
我的建议是:使用SQL="Select * from dbo.表1"先全部下载下来,再存入数组中,你爱怎么倒腾怎么倒腾,速度绝对比你跑SQL语句快N倍。
我在外企的IT部门工作,当SQL数据量大的时候,我喜欢在SQL上执行最简单的操作,然后在本地做处理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
搜索 行列转换
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用动态sql写行列转换
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |