Mysql-sql行转列
原始数据如下图所示:(商品的销售明细)
date=业务日期;Item=商品名称;saleqty=销售数量
-- 建立测试数据(表)
create table test (Date varchar(10), item char(10),saleqty int);
insert test values('2010-01-01','AAA',8);
insert test values('2010-01-02','AAA',4);
insert test values('2010-01-03','AAA',5);
insert test values('2010-01-01','BBB',1);
insert test values('2010-01-02','CCC',2);
insert test values('2010-01-03','DDD',6);
实现的方法和思路如下:两个方法
-- 实现结果的静态SQL语句写法
-- 整理报表需要的格式
方法一:case item when x then xx when y then yy end
select date,
case item when 'AAA' then saleqty end as AAA,
case item when 'BBB' then saleqty end as BBB,
case item when 'CCC' then saleqty end as CCC,
case item when 'DDD' then saleqty end as DDD
from test;
方法二:if(条件判断,成立结果,不成立结果)
select date,
if (item = 'AAA',saleqty,null) as AAA,
if (item = 'BBB',saleqty,null) as BBB,
if (item = 'CCC',saleqty,null) as CCC,
if (item = 'DDD',saleqty,null) as DDD
from test;
-- 按日期汇总行
select date,
sum(case item when 'AAA' then saleqty end)as AAA,
sum(case item when 'BBB' then saleqty end)as BBB,
sum(case item when 'CCC' then saleqty end)as CCC,
sum(case item when 'DDD' then saleqty end)as DDD
from test group by date;
select date,
sum(if (item = 'AAA',saleqty,null)) as AAA,
sum(if (item = 'BBB',saleqty,null)) as BBB,
sum(if (item = 'CCC',saleqty,null)) as CCC,
sum(if (item = 'DDD',saleqty,null)) as DDD
from test group by date;
-- 处理数据:将空值的栏位填入数字0;
select date,
ifnull(sum(case item when 'AAA' then saleqty end) ,0)as AAA,
ifnull(sum(case item when 'BBB' then saleqty end) ,0)as BBB,
ifnull(sum(case item when 'CCC' then saleqty end) ,0)as CCC,
ifnull(sum(case item when 'DDD' then saleqty end) ,0)as DDD
from test group by date;
select date,
ifnull(sum(if (item = 'AAA',saleqty,null)),0) as AAA,
ifnull(sum(if (item = 'BBB',saleqty,null)),0) as BBB,
ifnull(sum(if (item = 'CCC',saleqty,null)),0) as CCC,
ifnull(sum(if (item = 'DDD',saleqty,null)),0) as DDD
from test group by date;
静态SQL语句编写完成!
其实有一步骤有点多余:可以直接if(,,0),而不是if(,,null)
select date,
if (item = 'AAA',saleqty,0) as AAA,
if (item = 'BBB',saleqty,0) as BBB,
if (item = 'CCC',saleqty,0) as CCC,
if (item = 'DDD',saleqty,0) as DDD
from test;
select date,
sum(if (item = 'AAA',saleqty,0)) as AAA,
sum(if (item = 'BBB',saleqty,0)) as BBB,
sum(if (item = 'CCC',saleqty,0)) as CCC,
sum(if (item = 'DDD',saleqty,0)) as DDD
from test group by date;
静态SQL语句编写完成!
参考网址https://www.cnblogs.com/ShaYeBlog/p/3594517.html
================================================================================================================
三月的时候就遇到了行转列。
计算一个表中的字段被清洗和标准化被命中的比例和原因。
转成行输出。
Mysql-sql行转列的更多相关文章
- SQL行转列 (及EAV模型获取数据)
参考文章: http://www.williamsang.com/archives/1508.html 情景简介 学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列. ...
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- Ms sql行转列。汇总
SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...
- sql 行专列 列转行 普通行列转换
转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换 ...
- sql 行转列 PIVOT 列转行 UNPIVOT
原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 ...
- sql 行转列总结
原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- 关于MySQL的行转列的简单应用(二)---group函数
MySQL的行转列.列转行.连接字符串 concat.concat_ws.group_concat函数用法使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一 ...
- mysql之行转列与列转行
mysql之行转列与列转行是数据查询的常见操作,以更好的来展示数据,下面就详细说说怎么实现. 行转列 行转列的话,就是将一条一条的行数据记录转换为一条列数据展示,一般来说是根据某一列来做汇总数据的操作 ...
- SQL行转列,列转行
SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...
- mysql实现行转列功能
实现从图一转行成图二的功能: 图一: 图二: 建表语句: CREATE TABLE `t_user_score` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT '主 ...
随机推荐
- JavaSE基础(九)--Java二进制运算
Java二进制运算 Java二进制表示法 首先了解下二进制,二进制是相对十进制而言的,当然还有八进制,十六进制等等,我们常用的都是十进制,计算机用的都是二进制,而符号表示常用十六进制. 二进制就是只有 ...
- ESXi 虚拟机 提示 无法打开本地虚拟机的 xxx.vmx 的本地管道的 问题解决.
1. 今天同事与我联系, 说一个虚拟机出现连不上, vcenter控制台关闭虚拟机之后 再次打开报错: 2. 自己最开始的解决方法 移除虚拟机, 进入服务器的datastore 重新注册, 结果发现问 ...
- 自己动手写一个服务网关-java
自己动手写一个服务网关 原文链接:https://www.cnblogs.com/bigben0123/p/9252444.html 引言 什么是网关?为什么需要使用网关? 如图所示,在不使用网关的情 ...
- Python实现二叉树的非递归中序遍历
思路: 1. 使用一个栈保存结点(列表实现): 2. 如果结点存在,入栈,然后将当前指针指向左子树,直到为空: 3. 当前结点不存在,则出栈栈顶元素,并把当前指针指向栈顶元素的右子树: 4. 栈不为空 ...
- 剑指offer38:输入一棵二叉树,求该树的深度
1 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2 思路和方法 深度优先搜索,每次得到左右子树当前最大路径,选择 ...
- Android Monkey压测命令
测试步骤:1.安装ADB2.连接被测手机和电脑3.打开CMD命令行4.输入monkey命令adb shell monkey -p your.package.name --pct-touch 30 -- ...
- 【hash表】收集雪花
[哈希和哈希表]收集雪花 题目描述 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有n个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集 ...
- EFcore的 基础理解<二> shadow 特性
接着上一篇.在MyEFTestContext 类中添加这个方法 protected override void OnModelCreating(ModelBuilder modelBuilder) { ...
- canvas学习之初级运用
<html> <head> <meta charset=utf-8> <title>绘制简单图形</title> <style typ ...
- 修改jumpserver源码并且实现一个自定义功能模块
在前面已经说了,如何打开jumpserver的管理控制台并且自定义自己的数据模型.接下来实现一个自定义的功能模块. 先看效果! 一 定义好自己的模型(model) 1.1 这一块儿在前一篇博文已经讲过 ...