zoukankan      html  css  js  c++  java
  • SQL行列转置

    今天给公司同事们出了一道例行考试题,要求写一句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
    

      

  • 相关阅读:
    CodeForces 576E Paingting Edges
    CodeForces 1361D Johnny and James
    agc027_d Modulo Matrix
    agc046_f Forbidden Tournament
    MySQL架构及优化原理
    Ubuntu下无法安装pip
    WSL安装问题----wslregisterdistribution failed with error: 0x8007007b
    基础排序算法总结(一)
    透明代理、匿名代理、混淆代理、高匿代理
    常见“加密”算法之 base64
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/6780437.html
Copyright © 2011-2022 走看看