Mysql 列传行

数据库user表数据

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('kkl', 'name', 'kkl');
INSERT INTO `user` VALUES ('hsl', 'age', '12');
INSERT INTO `user` VALUES ('hsl', 'sex', 'boy');
INSERT INTO `user` VALUES ('hsl', 'name', 'hsl');
INSERT INTO `user` VALUES ('kkl', 'age', '27');
INSERT INTO `user` VALUES ('kkl', 'sex', 'boy');

SET FOREIGN_KEY_CHECKS = 1;

执行的SQL

-- SELECT username,group_concat(`key`) AS `keys`,group_concat(`value`) AS `values`  FROM `user` GROUP BY username
-- SELECT DISTINCT `key` FROM `user`
-- SELECT DISTINCT
-- 	username,
-- 	( CASE WHEN `key` = "name" THEN `value` ELSE NULL END ) `name`,
-- 	( CASE WHEN `key` = "age" THEN `value` ELSE NULL END ) `age`,
-- 	( CASE WHEN `key` = "sex" THEN `value` ELSE NULL END ) `sex` 
-- FROM
-- 	`user`
SELECT a.username,GROUP_CONCAT(a.`name`) AS `name`,
GROUP_CONCAT(a.`sex`) AS `sex`,GROUP_CONCAT(a.`age`) AS `age` FROM ( SELECT DISTINCT
	username,
	( CASE WHEN `key` = "name" THEN `value` ELSE NULL END ) `name`,
	( CASE WHEN `key` = "age" THEN `value` ELSE NULL END ) `age`,
	( CASE WHEN `key` = "sex" THEN `value` ELSE NULL END ) `sex` 
FROM
	`user` ) a GROUP BY a.`username`

结果图

在这里插入图片描述
在这里插入图片描述