行列转换对于工作还是学习中总是不可避免的会遇到(虽然本人还尚未工作,萌萌哒的学生一枚),解决的方法也有很多,我这里就总结一下我所想解决的问题以及怎么去解决的方法,

可能网上已经有很多类似的方法了,有的比我的可能会更好,就当我记录一下自己的学习经历吧。这里我们列举一个关于股票的每日入账出账做一个统计然后整理数据,虽然例子可能不太合理,

但是不要太执着于这些细节,能说明问题就好,傻笑ing。。。。。

1 列转行:按照某一列分组,将另一列作为行时列名可数,不变。

什么意思呢?话说多了反而不懂,放两张图以表敬意。

很简单的做法,就是想统计一下一天的买入卖出情况,实现起来也很简单,因为操作这一列就两种行为,转换起来也非常简单,代码如下

SELECT 日期 ,
SUM(CASE 操作 WHEN '买入' THEN 交易额 ELSE 0 END ) 买入,
SUM(CASE 操作 WHEN '卖出' THEN 交易额 ELSE 0 END ) 卖出
FROM TabName
GROUP BY 日期

其实就是对case when then else的使用,也没有什么特别的技巧,非要说运用了什么思想的话就是采用了两次分组的思想吧。第一次分组是按日期分组,第二次则是按操作

来进行分组。如何你想将买入和卖出操作合并的话,就要利用一个函数,group_concat,从单词的意思就可以看出来,就是组的拼接(英语太渣,不要介意),得到的效果如下

mysql代码如下:

select
日期, group_concat(日期,交易额) as 统计from TabName
group by Date

 

sqlserver代码如下:

select 日期,
CONCAT('买入:',SUM(CASE 操作 WHEN '买入' THEN 交易额 ELSE 0 END ) ,'卖出:',SUM(CASE 操作 WHEN '卖出' THEN 交易额 ELSE 0 END )) as 统计
from TabName
group by 日期

对此我只想说一句,微软mmp,你就不能学一下腾讯,借鉴借鉴,傻笑ing!

2 同样是列转行,但是如果作为行的列并不可数,例如本例中的日期,那么又应该怎么做呢?

现实真残酷,当时做到这一步真的不知道怎么办,因为日期并不知道有多少(并不能因为我这里列出了三个就默认为三个,毕竟以后还不知道会有什么数据,所以我们并不能宽泛的讨论)

其实想想当时也真傻,不知道有多少个就统计一下呗,自己创建一个函数将所有的不同的日期统计下来不就好了。思路清晰了,接下来就开工。

首先创建一个临时表,因为我每天的操作是重复的,所以我要先统计一下

select 操作,日期,sum(交易额) as 交易额
into #temp
from TabName
group by 操作,日期

接下来就是单纯的将日期这一列变为行了,这里我就采用pivot(关于pivot的介绍估计网上一大堆了,我就不叙述了,不理解的可以留言)

我的心好累,总算有结果了,接下来放代码

我只能说一句,不容易啊,首先用一个临时表将所有的不重复的日期找出来然后放到@date中,再将每日重复的买入卖出做一个统计,最后再

利用pivot进行行和列的翻转。这里必须要要注意一点,pivot所识别的列名必须是带有'[]'这俩中括号,所以我这里采用了quotename函数来加括号,

然后再利用substring进行切割多余的字母。

有啥更好的方法希望大佬们给点意见,如果方法重复了也希望不要喷我,互相学习吧,我只是菜鸟!

简单的叙述下SQL中行列转换的小知识!的更多相关文章

  1. SQL中行列转换Pivot

    --建表 ),课程 ),分数 int) --插入数据 ) ) ) ) ) ) 1.静态行转列(确定有哪些列) select 姓名, end)语文, end)数学, end)物理 from tb gro ...

  2. SQL Server中行列转换 Pivot UnPivot

    SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  3. 在Sqlserver下巧用行列转换日期的数据统计

    在Sqlserver下巧用行列转换日期的数据统计 前言 在SQLSERVER 中有很多统计函数的基础语法,有使用Group By 或 partition by 后配合Sum,Count(*) 等用法. ...

  4. PL/SQL 实现行列转换

    这篇博文写的是简单的行列转换的,以一个具体的例子来给出. 以前在论坛上有人问过相关的问题,上面的回答五光十色,有很多是可行的,当然更多的是自以为很高端,实际却不着边际的回答.下面进入正题. part1 ...

  5. SQL中DateTime转换成Varchar样式

    SQL中DateTime转换成Varchar样式语句及查询结果:Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect ...

  6. MySQL中行列转换的SQL技巧

    行列转换常见场景 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列 ...

  7. Sql实现行列转换

    从MS Sql Server 2005微软就推出了pivot和unpivot实现行列转换,这极大的方便了我们存储数据和呈现数据.今天就对这两个关键字进行分析,结合实例讲解如何存储数据,如何呈现数据. ...

  8. SQL Server 行列转换

    /* 标题:普通行列转换(version 2.0) 作者:范中磊 说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql ...

  9. Sql的行列转换

    创建表scores 一.传统的行列转换 纵表转横表 我们要转成的横表是这样子的: pivot是sql server 2005 提供的运算符,所以只要数据库在05版本以上的都可以使用.主要用于行和列的转 ...

随机推荐

  1. SQL Server-聚焦深入理解动态SQL查询(三十二)

    前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间 ...

  2. 第一章 Java语言概述2

    一.编写第一个Java应用程序 1.下载.安装JDK 官方网址:www.oracle.com java.sun.com 安装JDK 傻瓜式安装,下一步即可. 建议:安装路径不要有中文或者特殊符号,如空 ...

  3. 本地Solr服务器搭建

    一.Solr官网下载http://lucene.apache.org/solr/下载Solr项目文件 在该项目文件中,可以找到我们在本地环境下运行Solr服务器所需要的资源文件,在这里我们以4.10. ...

  4. EF CodeFirst下数据库更新

    用EF Code first模式来开发系统,可使用Migrations命令来让数据库自动更新 1.在VS->工具->库程序包管理器->程序包管理控制台 中执行 Enable-Migr ...

  5. 2017-2-24 C#基础 for循环的嵌套

    用几个练习题演示一下for循环的嵌套 1.打印以下图形 ★★★★★★★★★★★★★★★ namespace _2017_2_24_for循环的嵌套 { class Program { static v ...

  6. 【排序算法】直接选择排序算法 Java实现

    基本思想 直接选择排序是从无序区选一个最小的元素直接放到有序区的最后. 初始状态:无序区为a[1...n],有序区为空. 第一次排序:在无序区a[1...n]中选出最小的记录a[k],将它与有序区的第 ...

  7. Ichars制作数据统计图

    数据统计图基本上每个网站的后台都要做,不仅要做还要的非常详细才行,这样才能全面的具体的了解网站数据.之前用的jfreechart没有iChartjs用着方便,也没有iChartjs的效果炫,所以果断弃 ...

  8. jquery ajax标准写法

    $.ajax({ url:url,                      //地址 type:'post', //请求方式 还可以是get type不可写成Type 不让会导致数据发送不过去,使用 ...

  9. 图片流量节省大杀器:基于腾讯云CDN的sharpP自适应图片技术实践

    目前移动端运营素材大部分依赖图片,基于对图片流量更少,渲染速度更快的诉求,我们推动CDN,X5内核,即通产品部共同推出了一套业务透明,无痛接入的CDN图片优化方案:基于CDN的sharpP自适应图片无 ...

  10. Java数据结构之Map学习总结

    前言: 前面学习总结了List的使用及效率对比,今天总结学习一下键值映射关系Map,顺便学习一下Android中使用Map需要注意哪些,以及谷歌官方针对Android对Map做了哪些优化. 先了解下M ...