今天给公司同事们出了一道例行考试题,要求写一句SQL语句从上面表转换为下面表,经过艰难思索,一个同事做了出来。

小区             总数    A类车 B类车 C类车
建业森林半岛     210     100    30      80
万科城          200   50    60      90
丰乐园           210      30    70      110

车类型    总数    建业森林半岛 万科城  丰乐园
A类车      180       100       50       30
B类车    160        30       60       70
C类车      280        80       90       110

 
建表
CREATE TABLE `myc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`housing` varchar(50) CHARACTER SET latin1 DEFAULT NULL,
`all_car` int(11) DEFAULT NULL,
`a_car` int(11) DEFAULT NULL,
`b_car` int(11) DEFAULT NULL,
`c_car` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of myc
-- ----------------------------
INSERT INTO `myc` VALUES ('1', 'senlinbandao', '210', '100', '30', '80');
INSERT INTO `myc` VALUES ('2', 'wanke', '200', '50', '60', '90');
INSERT INTO `myc` VALUES ('3', 'fengle', '210', '30', '70', '110');
id	housing	       all_car	a_car	b_car	c_car
1 senlinbandao 210 100 30 80
2 wanke 200 50 60 90
3 fengle 210 30 70 110

  

  

 
SQL语句如下:
SELECT

c2 AS '车类型',

IF(c2='A类车',(SELECT SUM(a_car) FROM MYC),IF(c2='B类车',(SELECT SUM(b_car) FROM MYC),IF(c2='C类车',(SELECT SUM(c_car) FROM MYC),0))) AS '总数',

SUM(IF(c1='senlinbandao',c3,0)) AS '建业森林半岛',

SUM(IF(c1='wanke',c3,0)) AS '万科城',

SUM(IF(c1='fengle',c3,0)) AS '丰乐园'
from( select housing as c1,'A类车' as c2,a_car as c3 from MYC
Union select housing,'B类车' as c2,b_car from MYC Union select housing,'C类车' as c2,c_car from MYC
) AS tx group by c2;
第二种写法
SELECT
'a_car' 车类型,
MAX(CASE housing WHEN 'senlinbandao' THEN a_car ELSE 0 END ) 建业森林半岛,
MAX(CASE housing WHEN 'wanke' THEN a_car ELSE 0 END ) 万科城 ,
MAX(CASE housing WHEN 'fengle' THEN a_car ELSE 0 END ) 丰乐园,
SUM(a_car) 总数
FROM myc
UNION
SELECT
'b_car' 车类型,
MAX(CASE housing WHEN 'senlinbandao' THEN b_car ELSE 0 END ) 建业森林半岛,
MAX(CASE housing WHEN 'wanke' THEN b_car ELSE 0 END ) 万科城 ,
MAX(CASE housing WHEN 'fengle' THEN b_car ELSE 0 END ) 丰乐园,
SUM(b_car) 总数
FROM myc
UNION
SELECT
'b_car' 车类型,
MAX(CASE housing WHEN 'senlinbandao' THEN c_car ELSE 0 END ) 建业森林半岛,
MAX(CASE housing WHEN 'wanke' THEN c_car ELSE 0 END ) 万科城 ,
MAX(CASE housing WHEN 'fengle' THEN c_car ELSE 0 END ) 丰乐园,
SUM(c_car) 总数
FROM myc

  

SQL行列转置的更多相关文章

  1. SQL 行列转置

    ),),[Score] int) Insert Class union all union all union all union all union all union all union all ...

  2. SQL 行列倒置

    SQL的的行列倒置已经不是新知识了,但在博主的技术咨询期间,仍发现其实有很多人并不了解这块,所以在此专门写一篇博客记录.本文将以Mysql为例,并以数据采集指标信息获取为例子.在下面的例子,你可以在s ...

  3. 简化实现动态行列转置的SQL

    动态行列转换的计算在实际业务中非经常见,网上各类技术论坛上都有讨论,比方以下这些问题: http://www.iteye.com/problems/87788 http://bbs.csdn.net/ ...

  4. 使用SQL SERVER PIVOT实现行列转置

    一般我们在使用SQL语句实现行列转置时候,最常用的方法无外乎就是 case语句来实现,但是如果需要需要转置的列太多,那么case起来语句就无限庞大,十分不方便,sql server中的PIVOT就可以 ...

  5. SQL动态长度行列转置

    一,案列问题描述: 某销售系统中,注册的用户会在随后的月份中购物下单,需要按月统计注册的用户中各个月下单的金额.源数据表如下: FM::注册月份,CM: 下单月份, AMT:下单金额 期望得到如下统计 ...

  6. 用powershell+excel行列转置三步走

    本文重点讲解第一步,手动在excel表中输入公式,或者用powershell自动输入公式. 第二步,用powershell向excel中写入数据,略. 第三步,用powershell从excel中读取 ...

  7. Oracle 行列转置

    两种简单的行列转置 1.固定列数的行列转换如student   subject    grade--------- ---------- --------student1  语文       80st ...

  8. 数据透视表sql:用SQL行列转换实现数据透视的一些思考

    用SQL行列转换实现数据透视的一些思考 摘要:根据对报表开发过程中碰到的需要用SQL行列转换进行解决的一类查询统计问题的分析,逐步探索求解得到一种较通用的解决思路,并用函数进行实现.该解决思路及函数实 ...

  9. HAWQ中的行列转置

    行列转置是ETL或报表系统中的常见需求,HAWQ提供的内建函数和过程语言编程功能,使行列转置操作的实现变得更为简单. 一.行转列 1. 固定列数的行转列 原始数据如下: test=# select * ...

随机推荐

  1. luogu3188/bzoj1190 梦幻岛宝珠 (分层背包dp)

    他都告诉你能拆了 那就拆呗.把每个重量拆成$a*2^b$的形式 然后对于每个不同的b,先分开做30个背包 再设f[i][j]表示b<=i的物品中 容量为$ j*2^i+W\&((1< ...

  2. bzoj4337树的同构

    树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如果能够把树T1的所有点重 ...

  3. scrapy 基本命令

    创建scrapy项目 scrapy startproject project_name 创建爬虫文件 scrapy genspider [-t template] <name> <d ...

  4. Python By 360、小米

    小米 乱谈Python并发 说实话,我一直觉得PHP真的是最好的语言,不仅养活了一大批PHP程序员,同时还为安全人员提供了大量的就业机会.然而,令人唏嘘的是,安全界很多人其实是吃着Python的饭,操 ...

  5. NowCoder--牛可乐发红包脱单ACM赛C_区区区间间间

    题目链接:C_区区区间间间 思路:算贡献,求出每个数为当前最大值时所在的区间个数,和每个数为最小值的区间个数 和这个题有点类似 搭配食用效果更佳 点击这里 #include<bits/stdc+ ...

  6. 如何设置 ssh secure shell 支持中文

    只需要设置下/etc/sysconfig/i18n 文件内容如清单 1 所示. 清单 1. 文件内容 1 2 3 LANG="zh_CN.GB18030" SUPPORTED=&q ...

  7. Git设置彩色输出

    彩色输出 git config --global color.status auto git config --global color.diff auto git config --global c ...

  8. 解决MySQL5.7密码重置问题

    前言:最近活动,买了台服务器,环境什么的都弄完了,MySQL是安装的5.7的版本,连接进入的时候出现了下面的错误 这其实是MySQL5.7的一个安全机制,需要你重新设置密码. set password ...

  9. 第三篇-ubuntu18.04下截图快捷键

    ubuntu自带的截图工具感觉能够满足基本的截图功能,可以不必安装另外的截图软件. 一般用到的截图类型有三种:全屏.当前活动窗口.自定义区域,其中自定义区域截图是最灵活也是我们用的最多的方式.在ubu ...

  10. 微型 ORM-FluentData 实例详解

    https://blog.csdn.net/tai532439904/article/details/77879767 环境要求 .NET 4.0. 支持数据库 MS SQL Server 使用本地. ...