格式如下:
1    清华大学    2016
2    清华大学    2016
1    清华大学    2015
1    北京大学    2016
……
这样的结构
怎样分组查询达到横竖列效果
\                     2016       2015
清华大学       1/2          1
北京大学       1

解决方案 »

  1.   

    case when 进行行专列
      

  2.   

    SELECT university,
    SUM(CASE WHEN years=2016 THEN university ELSE 0 END) AS '2016年',
    SUM(CASE WHEN years=2015 THEN university ELSE 0 END) AS '2015年'
    FROM TableName 
    GROUP BY CONVERT(university,SIGNED)
    后面的结果不正确,
    大致是:
    -----------------------------------------------------
    university   2016年   2015
    清华大学    6             6
    北京大学    20           14
    ------------------------------------------------------
    怎样把university作为条件加到when里面
      

  3.   

    SELECT university,
    SUM(CASE WHEN years=2016 THEN university ELSE 0 END) AS '2016年',
    SUM(CASE WHEN years=2015 THEN university ELSE 0 END) AS '2015年'
    FROM TableName 
    GROUP BY CONVERT(university,SIGNED)
    后面的结果不正确,
    大致是:
    -----------------------------------------------------
    university   2016年   2015
    清华大学    6             6
    北京大学    20           14
    ------------------------------------------------------
    怎样把university作为条件加到when里面就是说,when years = 2016 and university = university?  这么吗
      

  4.   

    http://blog.csdn.net/acmain_chm/article/details/4283943
    MySQL交叉表
    在某些数据库中有交叉表,但在MySQL中却没有这个功能,但网上看到有不少朋友想找出一个解决方法,特发贴集思广义。http://topic.csdn.net/u/20090530/23/0b782674-4b0b-4cf5-bc1a-e8914aaee5ab.html?96198现整理解法如下:数据样本: create table tx(  id int primary key,  c1 c...
      

  5.   


    CONVERT(university,SIGNED)这个没必要加
      

  6.   


    SELECT university,
           MAX(CASE WHEN years = 2016 THEN ids END) AS `2016`,
           MAX(CASE WHEN years = 2015 THEN ids END) AS `2015`              
    FROM 
    (
    SELECT university,
           years,
           GROUP_CONCAT(id ORDER BY id SEPARATOR '/') ids
    FROM 
    (
    SELECT 1  id  ,'清华大学' university,    2016 years UNION ALL
    SELECT 2    ,'清华大学',    2016 UNION ALL
    SELECT 1    ,'清华大学',    2015 UNION ALL
    SELECT 1    ,'北京大学',    2016
    )t
    GROUP BY university,years
    )t
    GROUP BY university
    ORDER BY university DESC
    mysql> SELECT university,
        ->        MAX(CASE WHEN years = 2016 THEN ids END) AS `2016`,
        ->        MAX(CASE WHEN years = 2015 THEN ids END) AS `2015`
        -> FROM
        -> (
        ->  SELECT university,
        ->         years,
        ->         GROUP_CONCAT(id ORDER BY id SEPARATOR '/') ids
        ->  FROM
        ->  (
        ->  SELECT 1  id  ,'清华大学' university,    2016 years UNION ALL
        ->  SELECT 2    ,'清华大学',    2016 UNION ALL
        ->  SELECT 1    ,'清华大学',    2015 UNION ALL
        ->  SELECT 1    ,'北京大学',    2016
        ->  )t
        ->  GROUP BY university,years
        -> )t
        -> GROUP BY university
        -> ORDER BY university DESC
        -> ;
    +------------+------+------+
    | university | 2016 | 2015 |
    +------------+------+------+
    | 清华大学   | 1/2  | 1    |
    | 北京大学   | 1    | NULL |
    +------------+------+------+
    2 rows in set (0.03 sec)