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

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

但是不要太执着于这些细节,能说明问题就好,傻笑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. (二) 从Angular1到Angular2需要的预备知识

    1. TypeScript语法与ES6新特性 写惯了jQ的话突然从ES5跳到ES6,又是个变形的ES6(TypeScript),学习成本确实不低.不过笔者也是从ng1直接上手ng2,对与很多新特性的积 ...

  2. [Linux] PHP程序员玩转Linux系列-搭建代码开发环境

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 有些同学可能觉得我写的都是啥yum安装的,随便配置一下而已,没啥技术含量,我的目的 ...

  3. 一次MySQL死锁问题解决

    一次MySQL死锁问题解决 一.环境 CentOS, MySQL 5.6.21-70, JPA 问题场景:系统有定时批量更新数据状态操作,每次更新上千条记录,表中总记录数约为500W左右. 二.错误日 ...

  4. 在ZendStudio中增加新的php模板

    步骤: 找到目录:D:\Program Files\Zend\Zend Studio 12.5.1\plugins , 这要根据自己的安装情况来找,再找到以下文件org.eclipse.php.ui_ ...

  5. nginx配置参数详解

    配置参数详解 user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目.根据硬件调整,通常等于CPU数量或者2倍 ...

  6. 数据存储与访问之——初见SQLite数据库

          本节引言: 本节学习Android数据库存储与访问的第三种方式:SQLite数据库,和其他的SQL数据库不同,我们并不需要在手机上另外安装一个数据库手机软件,Android系统已经集成了这 ...

  7. 05String字符串课后作业

    1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 由此可得出,用加号连接的字符串和一整个字符串相同代码判断是true,而新开辟空间的不 ...

  8. Troubleshooting OpenStack 瘫痪 - 每天5分钟玩转 OpenStack(160)

    这是 OpenStack 实施经验分享系列的第 10 篇.是软件就会有 bug,OpenStack 也不例外,只要用它就一定会遇到故障.Troubleshooting(故障排除)是运维 OpenSta ...

  9. Debian安装Oracle Java步骤

    在Debian下安装OpenJDK使用apt命令非常方便的安装,但安装Oracle就需要手动了,这里需了解ln和update-alternatvies命令. ln链接 首先我们来说说linux的链接, ...

  10. Java日志工具之SLF4J

    SLF4J全称为Simple Logging Facade for Java (简单日志门面),作为各种日志框架的简单门面或者抽象,包括 java.util.logging, log4j, logba ...