v5tech / notes

notes
https://ameizi.gitee.io/notes
MIT License
1.52k stars 378 forks source link

MySQL行转列 #156

Open v5tech opened 7 years ago

v5tech commented 7 years ago
CREATE TABLE `example`(`id` INT, `order` INT, `data` VARCHAR(1));

INSERT INTO `example` (`id`, `order`, `data`) 
VALUES
(1, 1, 'P'),
(2, 2, 'Q'),
(2, 1, 'R'),
(1, 2, 'S');
SELECT 
  id,
  MAX(IF(`order` = 1, `data`, 0)) data1,
  MAX(IF(`order` = 2, `data`, 0)) data2 
FROM
  `example` 
GROUP BY id
SELECT 
  id,
  MAX(IF(`order` = 1, `data`, 0)) data1,
  MAX(IF(`order` = 2, `data`, 0)) data2 
FROM
  `example` 
WHERE id = 1 
UNION
SELECT 
  id,
  MAX(IF(`order` = 1, `data`, 0)) data1,
  MAX(IF(`order` = 2, `data`, 0)) data2 
FROM
  `example` 
WHERE id = 2 
SELECT 
  e.id,
  a.data,
  e.data 
FROM
  `example` e 
  INNER JOIN 
    (SELECT 
      * 
    FROM
      `example` e) a 
    ON e.id = a.id 
WHERE e.order != a.order 
GROUP BY e.id

参考链接 http://stackoverflow.com/questions/14834290/mysql-query-to-dynamically-convert-rows-to-columns