今天给公司同事们出了一道例行考试题,要求写一句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. 【BZOJ5470】[FJOI2018]所罗门王的宝藏()

    [BZOJ5470][FJOI2018]所罗门王的宝藏() 题面 BZOJ 洛谷 有\(n+m\)个变量,给定\(k\)组限制,每次告诉你\(a_i+b_j=c_k\),问是否有可行解. 题解 一道很 ...

  2. Graham Scan凸包算法

    获得凸包的算法可以算是计算几何中最基础的算法之一了.寻找凸包的算法有很多种,Graham Scan算法是一种十分简单高效的二维凸包算法,能够在O(nlogn)的时间内找到凸包. 首先介绍一下二维向量的 ...

  3. Dynamic CRM 2015学习笔记(1)Azure 上安装 CRM 2015

    今天终于在Azure上安装成功了CRM 2015,下面简单介绍下安装过程,以及出现问题的解决: 一. 配置AD, 安装IIS 参考下面的link,里面有详细的配置步骤 http://www.c-sha ...

  4. rt-thread是如何做到通过menuconfig配置将相应文件加入工程和从工程中除去

    @2019-01-25 [小记] 添加与删除文件的机制是: menuconifg 所显示的菜单是由一系列 Kconfig 文件构成的,这些菜单实际就是一系列的宏控制,而这些宏又控制着一系列的 SCon ...

  5. 「TJOI2015」线性代数 解题报告

    「TJOI2015」线性代数 和牛客某题很像 在和里面有\(B_{i,j}\)要求是\(A_i,A_j\)都为\(1\),和里面减去\(C_i\)要求\(A_i\)为\(1\),然后先把贡献也就是\( ...

  6. centos7使用yum安装zabbix3.4

     应用环境: 关于ZABBIX: zabbix一开强大的开源监控工具,同类型还有nagios,ganglia,cacti等监控工具,通过过去一年Google趋势就知道zabbix全球的相对热度:   ...

  7. 杨辉三角 II

    题目描述 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 贴出代码 class ...

  8. codeforces #541 D. Gourmet choice(拓扑+并查集)

    Mr. Apple, a gourmet, works as editor-in-chief of a gastronomic periodical. He travels around the wo ...

  9. 微服务下 Spring Boot Maven 工程依赖关系管理

    单体 Spring Boot Maven 工程 最基本的 pom.xml 包含工程信息.Spring Boot 父工程.属性配置.依赖包.构建插件 <?xml version="1.0 ...

  10. 牛客网NOIP赛前集训营-提高组(第一场)

    牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...