5.1.行转列

  1. CREATE TABLE `table1` (
  2. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  3. `year` varchar(50) DEFAULT NULL,
  4. `month` varchar(50) DEFAULT NULL,
  5. `amount` varchar(50) DEFAULT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1

image.png

SELECT
    `year`,
    MAX(
        CASE
        WHEN MONTH = '1' THEN
            amount
        END
    ) AS '一月',
    MAX(
        CASE
        WHEN MONTH = '2' THEN
            amount
        END
    ) AS '二月',
    MAX(
        CASE
        WHEN MONTH = '3' THEN
            amount
        END
    ) AS '三月',
    MAX(
        CASE
        WHEN MONTH = '4' THEN
            amount
        END
    ) AS '四月'
FROM
    table1
GROUP BY
    `year`;

image.png

5.2列转行

CREATE TABLE `table2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(50) DEFAULT NULL,
  `file_url` varchar(50) DEFAULT NULL,
  `file_name` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

image.png

SELECT 
    user_id,
    GROUP_CONCAT(file_name,':',file_url) AS file
FROM
    table2 GROUP BY user_id

image.png