写sql,怎么将查询结果的行列转换呀?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写sql,怎么将查询结果的行列转换呀?相关的知识,希望对你有一定的参考价值。

例如表cj
名字 科目 分数
A 语文 100
A 数学 90
A 外语 99
B 语文 90
B 数学 80
B 外语 100

方法 (一)
select * from cj
select 名字, max(case 科目 when '语文' then 分数 else 0 end ) 语文,
max(case 科目 when '数学' then 分数 else 0 end ) 数学,
max(case 科目 when '外语' then 分数 else 0 end ) 外语
from cj
group by 名字

方法 (二)

declare @sql varchar(800)
set @sql='select 名字'
select @sql =@sql+', max(case 科目 when '''+科目+''' then 分数 else 0 end )['+科目+']'
from (select distinct 科目 from cj ) as a
set @sql=@sql+'from cj group by 名字'
exec(@sql)

结果:

名字 语文 数学 外语
A 100 90 99
B 90 80 100
参考技术A 有意思的问题 给出一个参考的URL: 假设你表是这样的结构部件 入库日期 入库数量 A 1/1 10 A 1/1 5 A 1/2 10 B 1/5 10 其实就是两种方法,假设你的数据库是11以前的,只能先定义好查哪天到哪天 然后那么 selct 部件, sum( decode(入库日期=1号,入库数量,0), sum( decode(入库日期=2号,入库数量,0), 以此类推 from 入库表 group BY 部件(原理上就是将不是这天的变成0,再合计)要是Oracle数据库是11的话,就简单了,直接pivot搞定 pivot语法就不说了,网上一堆一堆的~ 参考技术B 看看这个链接对你有没有帮助

参考资料:http://wenku.baidu.com/view/5dda306127d3240c8447efb1.html

Excel或SQL Sserver中数据行列转置/转换?

每一行数据有自己的标识ID,和对应的多个项目列。一行数据中可能有三个项目也可能只有一个项目。想要达到把一行数据按照项目个数转化为多行数据,同时每行数据保留ID和一个项目。详细见下图

EXCEL2016有个功能叫做【逆透视】专门完成这个功能,之前的版本没有,只有自己写公式。

最简单的公式如下,需要下拉后去除公式、筛选删除B列为空白的。

A9输入公式=A2

B9输入公式=C2

B9右拉

A9:C9下拉

A2:B15就是最终结果,需要去除公式、删除B列为0的行即可。

参考技术A 如果只有三列,复制粘贴一下就可以了。

复制A列数据,在A列末尾粘贴两次,复制C列数据粘贴到B列末尾,再复制D列数据粘贴到B列末尾。对B列筛选,把空的去掉。

以上是关于写sql,怎么将查询结果的行列转换呀?的主要内容,如果未能解决你的问题,请参考以下文章

oracle 行列转换

oracle中一个表的行列转换

oracle行列转换问题

SQL行列转换

sql动态实现行列转换

SQL行列转换